我试图让下面的make文件在Windows和Unix中都能工作。我遇到的问题是,标准的 <VAR> := <Value>
似乎不能在Windows中正常工作(我安装了 make
通过Cholocalety方式与 choco install make
). 我可以检查 ifeq ($(OS),Windows_NT)
每次都是这样,但我宁愿用一个内部变量来传递。如果有任何帮助,我将感激不尽,因为我不知道如何真正地在谷歌上搜索这个......。
代码输出是
Windows_NT
detected_OS: Windows
------------
Not-Windows
代码如下
#.RECIPEPREFIX:=> # This doesn't work either...
.PHONY: test
test:
ifeq ($(OS),Windows_NT) # is Windows_NT on XP, 2000, 7, Vista, 10...
$(eval DET_OS=Windows)
# DET_OS : =Windows
# DET_OS=Windows
else
$(eval detected_OS = nonWindows)
endif
@echo $(OS)
@echo detected_OS: $(DET_OS)
@echo ------------
# ifeq ($(DET_OS), Windows)
ifeq "$(DET_OS)" "Windows"
@echo Windows
else
@echo Not-Windows
编辑: 有人指出这篇文章缺少了一部分内容 所以我把它加在这里以示澄清。 这段代码应该执行的是 ifeq ($(DET_OS), Windows)
路径的后面部分。输出显示它沿着 non-windows
路径代替。我不知道我需要做什么,才能让它走下去。Windows
带用户自定义变量的路径
最主要的问题是,你不能设置 make
变量。当在配方中设置时,它被认为是一个要运行的命令,而不是一个变量设置。除此以外,我觉得它的效果还不错。
> Get-Content Makefile
.PHONY: test
ifeq ($(OS),Windows_NT)
DET_OS := Windows
else
DET_OS := nonWindows
endif
test:
@echo $(OS)
@echo detected_OS: $(DET_OS)
@echo ------------
ifeq ($(DET_OS),Windows)
@echo Windows
else
@echo Not-Windows
endif
输出:
> ..\make-4.3\WinRel\gnumake.exe
Windows_NT
detected_OS: Windows
------------
Windows
> ..\make-4.3\WinRel\gnumake.exe --version
GNU Make 4.3
Built for Windows32