2013-04-04 14 views
0

我想設置一個變量$(CFLAGS2)來保存不同的值,具體取決於我製作的目標。具體而言,我想有一個目標來編譯我的項目與「-g -Wall」,另一個與「-O3」在規則中指定一個make變量

我試了一下這樣的編譯:

CC=gcc 
COPT=-c $< -o [email protected] $(CADD) $(CFLAGS) $(CFLAGS2) 

.PHONY: opti 
.PHONY: debi 

opti: seto 
    make hammingtest 
debi: setd 
    make hammingtest 

.PHONY: seto 
seto: 
    $(eval CFLAGS2 := -O3) 

.PHONY: setd 
setd: 
    $(eval CFLAGS2 :=-g -Wall) 

hamming.o: hamming.cpp hamming.h 
    $(CC) $(COPT) $(DEFS) $(CFLAGS2) 

hammingtest.o: hammingtest.cpp hamming.h 
    $(CC) $(COPT) $(DEFS) $(CFLAGS2) 

hammingtest: hammingtest.o hamming.o 
    $(CC) -o hammingtest hammingtest.o hamming.o 

但是,當我做「debi」就好像$(CFLAGS)沒有設置(與「make opti」一樣) 我該怎麼做到這一點?

+0

奧利奇:感謝編輯 – user1479670 2013-04-04 10:21:55

+0

我找到了解決辦法,但我還沒有找到如何創建一個答案在這裏,我可以顯示代碼(即不是註釋)...的 – user1479670 2013-04-04 10:59:25

+0

可能重複[Makefile文件 - 根據目標定義編譯變量](http://stackoverflow.com/questions/5127977/makefile-define-compilation-variables-based-on-target-for) – Beta 2013-04-04 12:46:03

回答

0

不要在shell行中使用$(eval ...)。只是明顯錯了。

有很多方法可以做喲你想。既然你已經遞歸化妝設置,你可以使用命令行變量:

opti: 
    ${MAKE} COPTS2='-O3' hammingtest 

debi: 
    ${MAKE} COPTS2='-g -Wall' hammingtest 

一個更好的風格是避開了遞歸化妝,也許有利於目標的具體變量:

CC=gcc 
COPT=-c $< -o [email protected] $(CADD) $(CFLAGS) $(CFLAGS2) 

CFLAGS2 = $(error Someone tried to deref CFLAGS2!) 
opti: CFLAGS2 := -O3 
debi: CFLAGS2 := -g -Wall 

.PHONY: all 
all: 
    @echo 'What do you want to make?' 

.PHONY: opti debi 
opti debi: hammingtest 
opti debi: ; @echo [email protected] Success 

. 
. 
. 

這看起來很可能會匆匆一瞥。

雖然設置的方式有問題。例如,下面的shell命令序列會給你一個優化的版本,沒有警告。

$ make opti 
$ make debi