巧用Makefile給Go程式新增版本資訊

2021-08-30 15:37:34 字數 1352 閱讀 6004

golang 的程式編譯安裝,如果善加使用 makefile 檔案,可以使開發過程更規範與高效,比如:

1、給編譯的二進位制檔案「標記上」時間戳與原始碼版本號,方便程式更新與錯誤追溯。

2、開發時,監視檔案修改,自動編譯,執行測試用例,提高工作效率。

等等。。。

1、在 golang **中加入以下**

package main

import (

"fmt"

"os"

)// build info

var (

buildtime = ""

programcommitid = ""

goversion = ""

)func init()

}

2、在 makefile 執行編譯的語句中加入常量:

# 預設在專案的根目錄下執行 makefile

go_version=$(shell go version)

build_time=$(shell date +%f-%z/%t)

programcommitid=$(shell git rev-parse head) # 專案是 git 版本控制,則獲取當前 commit id

ldflags=-ldflags "-x 'main.goversion=$' -x main.buildtime=$ -x main.programcommitid=$"

all:

go build $ -v

3、以上**加入任意專案中,成功編譯後,比如可執行檔名為"executable",這樣執行executable -v,會列印資訊如下:

go version:     go version go1.11.1 linux/amd64

build time: 2018-10-29-cst/19:46:16

program commit id : 53df91aeb41bef38530bdd5a5ebc4f334331a9bf

原理解釋

1、ldflags是鏈結選項,-x表示在編譯時給變數賦值,通過 makefile 中新增命令就可以靈活地給程式中的變數賦值。

2、golang 的 main 包的 init 函式是 golang 程式初始化階段最後執行的乙個 init 函式,上面**的 init 函式執行完畢就os.exit(1)推出,不會執行到 main 包的 main 主函式,這樣,我們可以executable -v執行後檢視程式包的資訊後,關閉程式。

給go程式新增命令列引數

作業系統 centos 6.9 x64 go語言版本 1.8.3 需要應用程式根據不同的配置檔案訪問不同的伺服器,希望程式啟動時可以指定配置檔案。package main import os fmt func main conffile os.args 1 fmt.println argswithp...

go 語言 Makefile 指定依賴包位置

編譯 go 程式可以使用自帶的一些 makefile 指令碼來簡化編寫 makefile 官方的文件過於簡略,沒提到需要指定依賴包位置的方法。翻過那幾個指令碼 後,發現原來有 ldimports 和 gcimports 可以指定。比如 include goroot src make.inc ldim...

程式分解以及Makefile 編寫

開始時程式 ngnsvr9 none home xionghailong c cat orig.cpp include using namespace std struct node node addnode node p list,int value void printlist const no...