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...