如何在 NMake 中组合宏?

How to combine macros in NMake?

我想在 NMake 中组合宏?我是这样开始的。

nmake -f C:\Users\Administrator\Desktop\build.makefile TEST

但是输出是

fatal error U1001: syntax error : illegal character '$' in macro Stop.

而不是-03

FLAGS_PLATFORM     = %PLATFORM%
FLAGS_BUILD_TYPE   = %BUILD_TYPE%

FLAGS_X86_RELEASE  = -O3
FLAGS_X86_DEBUG    = -O3

FLAGS_X64_RELEASE  = -O3
FLAGS_X64_DEBUG    = -O3

FLAGS_COMPILER_X86 = compiler.exe
FLAGS_COMPILER_X64 = compiler.exe

FLAGS  = $(FLAGS_$(FLAGS_PLATFORM)_$(FLAGS_BUILD_TYPE))

TEST:
     echo "$(FLAGS)"

使用 GNU make(3.81,运行 on Mac OS X 10.10.5 Yosemite),此生成文件(example.mk ) 有效:

FLAGS_PLATFORM     = X86
FLAGS_BUILD_TYPE   = DEBUG

FLAGS_X86_RELEASE  = -m32 -O3
FLAGS_X86_DEBUG    = -m32 -g

FLAGS_X64_RELEASE  = -m64 -O3
FLAGS_X64_DEBUG    = -m64 -g

FLAGS = $(FLAGS_$(FLAGS_PLATFORM)_$(FLAGS_BUILD_TYPE))

test:
        @echo "$(FLAGS)"

例如:

$ make -f example.mk
-m32 -g
$ make -f example.mk FLAGS_PLATFORM=X64 FLAGS_BUILD_TYPE=RELEASE
-m64 -O3
$ make -f example.mk FLAGS_PLATFORM=X64 
-m64 -g
$ make -f example.mk FLAGS_BUILD_TYPE=RELEASE
-m32 -O3
$ make -f example.mk FLAGS_PLATFORM=X86 FLAGS_BUILD_TYPE=DEBUG
-m32 -g
$

您可以将 makefile 内置的默认值与命令行覆盖混合使用。如果您选择使用环境变量,在 Unix 上您将在 makefile 中使用 $(PLATFORM) 而不是 %PLATFORM%(并且 $(BUILD_TYPE) 而不是 %BUILD_TYPE%); make 导入所有环境变量(SHELL 除外)并使它们作为宏可用。

注意 makefile 在 FLAGS_PLATFORM 和 FLAGS_BUILD_TYPE 宏之后没有尾随注释;这些破坏了构建变量名的努力(除非您使用命令行覆盖)。

这是否适用于 Windows 上的 GNU make 或 NMake(Windows 上)超出了我的知识范围。