在Makefile命令中设置变量

时间:2012-07-24 10:47:47

标签: linux variables makefile gnu-make

我正面临着GNU makefile的愚蠢问题。 我想定义两个目标来构建一个c程序;一个用于调试,另一个没有。

runNoDebug: setNoDeb objs runMe

runDebug: setDeb objs runMe

setNoDeb:
     {EXPORT} MyDEBUG= -O3

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

objs: cFiles
    $(CC) -o $@ $^ $(cFiles) $(CFLAGS) $(LIBS) $(MYDEBUG)

runme: objs
    ./oo

运行此makefile时出现错误,设置调试的命令在子shell上执行导致错误。如果添加“导出”,则变量在该子shell中定义。

我想在makefile中定义这个变量,以便在构建对象时使用。

有可能吗?或者我应该复制“objs:cFiles”目标吗?

1 个答案:

答案 0 :(得分: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 $@