簡體   English   中英

特定目標的Makefile環境變量

[英]Makefile environment variable for specific target

我正在開發一個具有如下Makefile的go項目。 請注意,“發布”目標設置兩個環境變量,以便“構建”目標針對特定體系結構(可能不是構建系統的體系結構)進行交叉編譯。

# Generates a container release artifact.
release: export GOOS=linux
release: export GOARCH=amd64
release: build
  docker build ...

# Generates an executable for local use.
build: test
  go build ...

test: fmt vet
  go test ./...

...

問題在於,“ go test”命令還會檢測到GOOSGOARCH env var,這將導致該步驟失敗,因為顯然不支持跨平台測試

換句話說,這就像我要清除“測試”目標的環境變量,但是下面的示例似乎並未按預期取消設置變量:

unexport GOOS
unexport GOARCH
test: fmt vet
    go test ./...

我可以刪除“構建”目標的“測試”依賴關系,它可以正常工作,但是這似乎是錯誤的方法,因為如果測試失敗,我不想構建或釋放二進制文件。

我可以以某種方式修改Makefile,以便GOOSGOARCH環境變量由“發布”目標設置,並由“構建”目標使用,而不由從屬“測試”目標使用嗎?

也許還有其他方法可以交叉編譯以發布,並且仍將測試作為依賴項運行,而不會使事情復雜化(例如通過Docker進行構建等)? 請注意,由於發布和構建目標有多個標志,因此make目標比上面的示例要復雜一些。

我會這樣:

test: export GOOS=
test: export GOARCH=
test: fmt vet
    go test ./...

為什么不這樣做呢? 這期間將只設置這些環境變量go執行。

    # Generates a container release artifact.
release: build
  docker build ...

# Generates an executable for local use.
build: test
  GOOS=linux GOARCH=amd64 go build ...

test: fmt vet
  go test ./...

...

我只是意識到我可以在麻煩的測試命令本身中取消設置環境變量:

test: fmt vet
    GOOS= GOARCH= go test ./...

這樣,“執行測試”命令將始終使用本地系統的操作系統和體系結構(應如此!)。

Thx @KonstantinItskov的靈感

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM