2016-03-07 50 views
0

我想在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)" 
+0

您的FLAGS行中有不平衡的括號。你也許能夠使用的東西,如:'標誌= $(旗標_ $(FLAGS_PLATFORM)_ $(FLAGS_BUILD_TYPE))',但很可能不會被允許。 (make'的'有些版本可能會接受它,如GNU'make';許多人不會,我不知道在哪裏NMAKE下降。) –

+0

@JonathanLeffler我嘗試了與GNU'make',但我得到的只是「」 。 – user6025590

回答

0

隨着GNU make(3.81,在Mac OS X 10.10.5約塞米蒂運行),這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 
$ 

可以mix'n'match內置到makefile使用命令行覆蓋默認值。如果您選擇使用環境變量,在Unix上你會使用$(PLATFORM),而不是%PLATFORM%(和$(BUILD_TYPE)而不是%BUILD_TYPE%)在makefile; make導入所有環境變量(SHELL除外),並使其可用作宏。

請注意,makefile在FLAGS_PLATFORM和FLAGS_BUILD_TYPE宏之後沒有尾隨註釋;那些打破了建立變量名的努力(除非你使用命令行覆蓋)。

是否工作與GNU make在Windows,或NMAKE(在Windows上)我是無法理解。

+1

它可以在Windows上與GNU'make' 4.1一起使用。 – user6025590