2011-02-26 52 views
9

我的C++源文件尋找從makefile傳遞的特定變量。當製作不同的目標時,這個變量的定義是不同的。根據目標定義編譯變量

我如何定義基於目標在Makefile中的變量。

感謝

+1

ŧ他變量被傳遞爲'-D'標誌?你能否提供一個你的Makefile中有多個目標的摘錄? – 2011-02-26 17:49:23

回答

6

你的意思是這樣的:

$ cat Makefile 
BUILD := debug 

cxxflags.debug := -g -march=native 
cxxflags.release := -g -O3 -march=native -DNDEBUG 
CXXFLAGS := ${cxxflags.${BUILD}} 

all : 
    @echo BUILD=${BUILD} 
    @echo CXXFLAGS=${CXXFLAGS} 

.PHONY : all 

輸出:

$ make 
BUILD=debug 
CXXFLAGS=-g -march=native 

$ make BUILD=release 
BUILD=release 
CXXFLAGS=-g -O3 -march=native -DNDEBUG 
15

您可以使用target-specific variable values,他們傳播到目標的先決條件:

all : foo bar 
foo : CXXFLAGS += -DFOO 
bar : CXXFLAGS += -DBAR 

foo bar : 
    @echo [email protected] CXXFLAGS=${CXXFLAGS} 

.PHONY : all 
+0

請注意,這隻適用於GNU的make。 – martinkunev 2017-11-24 20:00:23

+0

@martinkunev那麼,GNU make是唯一的便攜式品牌AFAIK。 'nmake'是Windows特有的並且是垃圾,Sun使用Sun和Solaris製作了很多圈......我不熟悉其他品牌。 – 2017-11-24 21:30:36