使用 Makefile 輕鬆管理 Go 項目:提高開發效率的利器
一、介紹
1、make 介紹
-
make
是一個構建自動化工具,會在當前目錄下尋找Makefile
或makefile
文件 -
如果存在相應的文件,它就會依據其中定義好的規則完成構建任務
2、Makefile 介紹
-
藉助
Makefile
我們在編譯過程中不再需要每次手動輸入編譯的命令和編譯的參數,可以極大簡化項目編譯過程。 -
我們可以把
Makefile
簡單理解爲它定義了一個項目文件的編譯規則。 -
藉助
Makefile
我們在編譯過程中不再需要每次手動輸入編譯的命令和編譯的參數,可以極大簡化項目編譯過程。 -
同時使用
Makefile
也可以在項目中確定具體的編譯規則和流程,很多開源項目中都會定義Makefile
文件
3、win10 安裝 make
-
MinGW 下載網頁:http://sourceforge.net/projects/mingw/files/latest/download?source=files
-
右擊計算機 -> 屬性 -> 高級系統設置 -> 環境變量,在系統變量中找到 PATH
-
將 MinGW 安裝目錄裏的 bin 文件夾的地址添加到 PATH 裏面。
-
打開 MinGW 的安裝目錄,打開 bin 文件夾,將 mingw32-make.exe 重命名爲 make.exe。
-
經過以上步驟後,控制檯可以輸入 make
4、規則介紹
-
Makefile
由多條規則組成,每條規則主要由兩個部分組成,分別是依賴的關係和執行的命令。 -
其結構如下所示:
[target] ... : [prerequisites] ...
<tab>[command]
...
...
-
其中:
-
targets:規則的目標
-
prerequisites:可選的要生成 targets 需要的文件或者是目標。
-
command:make 需要執行的命令(任意的 shell 命令)。可以有多條命令,每一條命令佔一行。
-
舉個例子:
build:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o xx
二、makefile 基本使用
1、main.go
package main
import (
"fmt"
"net/http"
)
func main() {
http.HandleFunc("/", hello)
server := &http.Server{
Addr: ":8888",
}
fmt.Println("server startup...")
if err := server.ListenAndServe(); err != nil {
fmt.Printf("server startup failed, err:%v\n", err)
}
}
func hello(w http.ResponseWriter, _ *http.Request) {
w.Write([]byte("hello v5blog.cn!"))
}
2、示例
-
BINARY="xxx"
是定義變量 -
.PHONY
用來定義僞目標,不創建目標文件,而是去執行這個目標下面的命令
.PHONY: all build run gotool clean help
# 編譯後的項目名
BINARY="xxx"
# 如果make後面不加任何參數,默認執行all
all: gotool build
build:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o ${BINARY}
run:
@go run ./main.go
#@go run ./main.go conf/config.yaml
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'"
3、使用
**三、完整
**
.PHONY: all build run gotool clean help
BINARY="bluebell"
all: gotool build
build:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags "-s -w" -o ./bin/${BINARY}
run:
@go run ./main.go conf/config.yaml
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'"
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/Fxd7hDtjRWEeBTxk3ba9fg