我在Windows上交叉编译用于Linux的Golang程序,使用:
go build -o myprog.bin myprog.go
为此,我必须设置环境变量GOOS=linux。由于我还在为windows编译一些程序,当我完成交叉编译时,我必须重新设置GOOS=windows。所以我有一个批处理文件,如下所示:
set GOOS=linux
go build -o myprog.bin myprog.go
set GOOS=windows
如果我碰巧同时为每个Linux和Windows编译两个程序,windows程序可能会被编译为Linux。是否有方法将环境变量的范围限制在windows上的命令上,或者为命令重写它?例如
go build -o myprog.bin myprog.go -GOOS linux
我知道goxc提供了这个,但是可以去构建吗?
发布于 2014-02-17 03:36:11
为了构建Greg的答案(它解释了使用set
命令进行的更改仅限于进程),如果您想限制进程中环境变量更改的范围,请使用setlocal
和endlocal
命令。这允许您在单个命令进程中隔离变量。
setlocal
set GOOS=linux
go build -o myprog.bin myprog.go
endlocal
:: GOOS will now equal what it was before being set within the scope
发布于 2014-02-17 01:28:02
环境变量是设置它们的进程的本地变量(以及该进程的后代)。因此,当您执行set GOOS=linux
时,更改只发生在该命令处理器中,而不影响任何其他现有进程。从该命令处理器内部启动的新进程继承其环境变量的当前值。
因此,简单地说,您的set GOOS=linux
解决方案与set GOOS=windows
后面的解决方案将运行良好,并且不存在干扰其他同步构建的风险。
https://stackoverflow.com/questions/21819234
复制相似问题