亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Makefile 未設置 GOOS 環境變量

Makefile 未設置 GOOS 環境變量

Go
四季花海 2023-06-19 15:50:23
我在 Makefile 下面寫了為不同平臺構建 Golang 代碼。(我的操作系統是 Windows 10 并通過命令提示符運行 Makefile)GOCMD   =  goGOBUILD =  $(GOCMD)  buildGOFILES =   $(wildcard *.go)SONG_PATH =  ./song-serviceSONG_PATH_OUTPOUT =  ./song-service/cmdSONG_BINARY_NAME_LIN =  songservice_linsong-build-lin:    set GOOS=linux    set GOARCH=amd64    $(GOBUILD)  -o "$(SONG_PATH_OUTPOUT)/$(SONG_BINARY_NAME_LIN)" -v "$(SONG_PATH)/$(GOFILES)"當我運行時make song-build-lin它運行沒有錯誤,但 GOOS 變量沒有設置。但是當我set GOOS=linux直接在命令提示符下運行時它起作用了!
查看完整描述

2 回答

?
蝴蝶刀刀

TA貢獻1801條經驗 獲得超8個贊

終于找到答案了

我使用 VSCode 終端運行 make 命令,我使用的終端類型是命令提示符。如果將終端類型更改為 Git bash,命令將正常運行。


查看完整回答
反對 回復 2023-06-19
?
梵蒂岡之花

TA貢獻1900條經驗 獲得超5個贊

這是一個很好的問題,也是一個很好的話題。

我被迫將 Windows 用于工作目的以進行開發。我有一些使用 Windows 的隊友,一些使用 Mac 的隊友,還有一些人更喜歡在 Linux 上工作但不能,我們剛得到一些 Linux 服務器,我們需要將其編譯為可執行文件。我最近瀏覽了 Makefile 教程網站https://makefiletutorial.com/,他們有一個關于導出變量的部分。

在我的 Windows 機器上,我可以使用一個 shell,cygwin。下面是我能夠使用的 make 文件中的編譯...



# compile - cross compile all platforms

compile:

    @echo " === Compiling for every OS and Platform === "

    make compile-linux

    make compile-win 

    make compile-mac

    @echo " === COMPLETED! === "


# compile-linux - compile and create a linux executable for 64bit architecture

# NOTE: this sets the GOOS and GOARCH just for this makefile rule

compile-linux: export GOOS=linux

compile-linux: export GOARCH=amd64

compile-linux:

    go build -o bin/executable-linux.exe


# compile-win - compile and create a windows executable for 64bit architecture 

compile-win: export GOOS=windows

compile-win: export GOARCH=amd64

compile-win:

    go build -o bin/executable-win.exe


# compile-mac - compile and create a mac os executable for 64bit architecture 

compile-mac: export GOOS=darwin

compile-mac: export GOARCH=amd64

compile-mac:

    go build -o bin/executable-mac

這似乎對我有用,使用 Powershell 7 和/或 Windows 命令行,以及我使用 MacOS 的隊友。

這是通用的,可以添加到任何地方使用。


對于這個解決方案(雖然它已經回答了 2 年以上)可能是這樣的......


GOCMD   =  go

GOBUILD =  $(GOCMD)  build

GOFILES =   $(wildcard *.go)

SONG_PATH =  ./song-service

SONG_PATH_OUTPOUT =  ./song-service/cmd

SONG_BINARY_NAME_LIN =  songservice_lin


song-build-lin: export GOOS=linux

song-build-lin: export GOARCH=amd64

song-build-lin:

    $(GOBUILD)  -o "$(SONG_PATH_OUTPOUT)/$(SONG_BINARY_NAME_LIN)" -v "$(SONG_PATH)/$(GOFILES)"

我很想知道這是否適用于您和其他人,以及是否有任何其他改進。我不是一個巨大的 Makefile 人,我很樂意學習和改進它。


查看完整回答
反對 回復 2023-06-19
  • 2 回答
  • 0 關注
  • 218 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號