2012-07-24 210 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]