首頁 > 軟體

Makefile構建Golang專案範例詳解

2022-07-25 14:00:34

背景

構建和測試大型專案時都會很耗時,且容易出錯。開發者在開發過程中需要不斷執行go build、go run 、go test等相關命令。還可能需要多個命令來構建不同平臺的二進位制檔案。在正式部署時候,我們可能還需要安裝一些依賴項,或者在釋出之前進行程式碼覆蓋率測試等相關前置工作。

整個過程需要很多步驟,但我們有一種簡單的方法可以解決這些複雜瑣碎的步驟。使用 Make 進行自動執行任務。它通過單個命令簡化開發並自動執行重複性任務。

Make 可以幫我們做很多事情:測試、構建、清理、安裝 Go 專案。

建立專案並執行

首先我們先建立一個簡單的專案,建立一個 main.go 檔案。為了執行專案,我們需要構建專案並執行二進位制檔案:

go build main.go

當我們建立 Go 專案然後會遇到需要不同的二進位制名稱並且需要在特定的作業系統中建立構建,那麼可以通過指定環境進行構建:

# 指定 macos系統
GOARCH=amd64 GOOS=darwin go build -o hello-darwin main.go
# 指定 Linux 作業系統
GOARCH=amd64 GOOS=linux go build -o hello-linux main.go
go run hello

如果在開發部署過程中,我們不僅要記住這些命令然後遇到不同環境輸入命令執行。在這個過程中你可能會發生輸錯命令等行為。

使用 Makefile 可以協助我們高效工作,因為它可以幫助我們簡化上述命令,甚至可以為特定命令指定規則並執行簡單的 make 命令,這樣不僅可以讓你免去記住這些命令和環境的關係。

新增 Makefile 檔案

在當前專案的根目錄下建立一個 Makefile 檔案,設定內容如下:

BINARY_NAME=hello
build:
 GOARCH=amd64 GOOS=darwin go build -o hello-darwin main.go
 GOARCH=amd64 GOOS=linux go build -o hello-linux main.go
run:
 ./${BINARY_NAME}
build_and_run:build run
clean:
  go clean
  rm ${BINARY_NAME}-darwin
  rm ${BINARY_NAME}-linux

建立完 Makefile 檔案後,就可以通過這些簡單的命令進行編譯和執行你的 Go 專案:

make run
make build
# 也可以使用在 makefile 中定義的一個命令:build_and_run
make build_and_run
# 使用清除命令清除二進位制檔案
make clean

以上命令相對於一開始的命令更簡單,使用簡單,也可以避免因輸出命令導致的相關錯誤。

Makefile

概念

make 命令都是來源於 Makefile 檔案的。其都是由一系列的規則構成。每條規則都是由目標、依賴項、命令組成。

  • 目標 Target:make 命令通過目標名稱執行具體命令。如上的 make run
  • 依賴項 Dependencies:目標可以具有需要在執行目標之前執行的依賴項
  • 配方 recipe:執行目標時將執行的實際命令

變數

Makefiles 也有使用變數的機制。在以上的 Makefile 檔案中,可以看到 ${BINARY_NAME} 的變數。所以當我們有相同的內容時可以通過新增變數進行替換。

可以使用 = 或 := 定義變數。

= 將遞迴擴充套件變數。 這將替換它被替換時的值。以下例子在執行 all 命令時,它會將 x 的值替換為最後更新的值。因此將列印:later bar。 例如:

x = foo
y = $(x) bar
x = later
all:
 echo $(y)

但是當你使用 := 進行變數賦值時,將列印第一次的值,比如:

x := foo
y := $(x) bar
x := later
all:
 echo $(y)
> foo bar

更多使用 makefile 命令,可以參考:makefiletutorial.com/

使用 Makefile 自動化任務

在開發專案時,可以將一些測試,執行測試覆蓋,管理依賴等工作,我們都可以建立一個 Makefile ,並在檔案中包含自動化這些任務的所有規則:

BINARY_NAME=hello
build:
 GOARCH=amd64 GOOS=linux go build -o ${BINARY_NAME}-linux main.go
run:
 ./${BINARY_NAME}
build_and_run: build run
clean:
 go clean
 rm ${BINARY_NAME}-linux
test:
 go test ./...
test_coverage:
 go test ./... -coverprofile=coverage.out
dep:
 go mod download
vet:
 go vet
lint:
 golangci-lint run --enable-all

使用這個簡單的 Makefile,您現在可以輕鬆地執行命令來執行任務。這樣就輕鬆自動化解決工作。

make test
make test_coverage
make dep
make vet
make lint

參考資料:

https://www.jb51.net/article/256709.htm

tutorialedge.net/golang/make…

以上就是Makefile構建Golang專案範例詳解的詳細內容,更多關於Makefile構建Golang的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com