首页 > 解决方案 > Windows 10 Makefile 设置变量问题

问题描述

我试图让下面的 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用户定义变量的路径前进

标签: windowsvariablesunixmakefile

解决方案


主要问题是您无法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

推荐阅读