如何在 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 上)超出了我的知识范围。
我想在 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 上)超出了我的知识范围。