2012-07-24 212 views
2

我在使用GNU makefile時遇到了一個愚蠢的問題。 我想定義兩個目標來構建一個c程序;一個用調試,另一個不用。在Makefile命令中設置變量

runNoDebug: setNoDeb objs runMe 

runDebug: setDeb objs runMe 

setNoDeb: 
    {EXPORT} MyDEBUG= -O3 

setDeb: 
    {EXPORT} MyDEBUG="-DDEBUG=1 -g" 

objs: cFiles 
    $(CC) -o [email protected] $^ $(cFiles) $(CFLAGS) $(LIBS) $(MYDEBUG) 

runme: objs 
    ./oo 

運行此makefile時出現錯誤,設置調試命令在子shell上執行導致錯誤。如果添加了「導出」,則該變量在該子外殼中定義。

我想在構建對象時使用的makefile iteself中定義這個變量。

可能嗎?或者我應該複製「objs:cFiles」目標?

+3

的可能重複[我如何配置我的makefile調試和發佈版本?(http://stackoverflow.com/questions/1079832/how-can-i-configure-my-makefile-用於調試和釋放,構建) – Mark 2012-07-24 11:38:56

回答

2

您需要target-specific variable values

此功能允許您根據,使目前正在建設的目標上同一個變量定義不同的值。

runNoDebug: setNoDeb runMe 

runDebug: setDeb runMe 

setNoDeb: CFLAGS += -O3 
setNoDeb: objs 

setDeb: CPPFLAGS += -DDEBUG=1 
setDeb: CFLAGS += -g 
setDeb: objs 

objs: $(cFiles) 
    $(CC) $(CFLAGS) $^ $(LIBS) -o [email protected]