為Go項目編寫Makefile
借助Makefile
我們在編譯過程中不再需要每次手動輸入編譯的命令和編譯的參數,可以極大簡化項目編譯過程。
make介紹
make
是一個構建自動化工具,會在當前目錄下尋找Makefile
或makefile
文件。如果存在相應的文件,它就會依據其中定義好的規則完成構建任務。
Makefile介紹
我們可以把Makefile
簡單理解為它定義了一個項目文件的編譯規則。借助Makefile
我們在編譯過程中不再需要每次手動輸入編譯的命令和編譯的參數,可以極大簡化項目編譯過程。同時使用Makefile
也可以在項目中確定具體的編譯規則和流程,很多開源項目中都會定義Makefile
文件。
本文不會詳細介紹Makefile
的各種規則,只會給出Go項目中常用的Makefile
示例。關於Makefile
的詳細內容推薦閱讀Makefile教程。
規則概述
Makefile
由多條規則組成,每條規則主要由兩個部分組成,分別是依賴的關系和執行的命令。
其結構如下所示:
[target] ... : [prerequisites] ... <tab>[command] ... ...
其中:
- targets:規則的目標
- prerequisites:可選的要生成 targets 需要的文件或者是目標。
- command:make 需要執行的命令(任意的 shell 命令)。可以有多條命令,每一條命令占一行。
舉個例子:
build: CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o xx
示例
.PHONY: all build run gotool clean help BINARY="bluebell" all: gotool build build: CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o ${BINARY} run: @go run ./ gotool: go fmt ./ go vet ./ clean: @if [ -f ${BINARY} ] ; then rm ${BINARY} ; fi help: @echo "make - 格式化 Go 代碼, 並編譯生成二進制文件" @echo "make build - 編譯 Go 代碼, 生成二進制文件" @echo "make run - 直接運行 Go 代碼" @echo "make clean - 移除二進制文件和 vim swap files" @echo "make gotool - 運行 Go 工具 'fmt' and 'vet'"
其中:
BINARY="bluebell"
是定義變量。.PHONY
用來定義偽目標。不創建目標文件,而是去執行這個目標下面的命令。