如何在 NMake 中组合宏?
Posted
技术标签:
【中文标题】如何在 NMake 中组合宏?【英文标题】:How to combine macros in NMake? 【发布时间】:2016-03-07 20:50:52 【问题描述】:我想在 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)"
【问题讨论】:
您的 FLAGS 行中有不平衡的括号。您也许可以使用类似:FLAGS = $(FLAGS_$(FLAGS_PLATFORM)_$(FLAGS_BUILD_TYPE))
,但这可能是不允许的。 (make
的某些版本可能会接受它,例如 GNU make
;许多其他版本不会。我不知道 NMake 落在哪里。)
@JonathanLeffler 我用 GNU make
尝试过,但我得到的只是“”。
【参考方案1】:
使用 GNU make
(3.81,在 Mac OS X 10.10.5 Yosemite 上运行),这个 makefile (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
中内置的'n'match 默认值与命令行覆盖混合使用。如果您选择使用环境变量,在 Unix 上,您将在 makefile
中使用 $(PLATFORM)
而不是 %PLATFORM%
(和 $(BUILD_TYPE)
而不是 %BUILD_TYPE%
); make
导入所有环境变量(SHELL
除外)并将它们作为宏提供。
请注意,makefile
在 FLAGS_PLATFORM 和 FLAGS_BUILD_TYPE 宏之后没有尾随 cmets;这些破坏了构建变量名的努力(除非您使用命令行覆盖)。
这是否适用于 Windows 上的 GNU make
,或适用于 NMake(在 Windows 上)超出了我的理解。
【讨论】:
以上是关于如何在 NMake 中组合宏?的主要内容,如果未能解决你的问题,请参考以下文章