2

我在使用 GNU makefile 时遇到了一个愚蠢的问题。我想定义两个目标来构建 ac 程序;一个有调试,另一个没有。

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 上执行导致错误。如果添加了“导出”,则该变量在该子外壳中定义。

我想在生成文件本身中定义这个变量,以便在构建对象时使用。

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

4

1 回答 1

2

您需要特定于目标的变量值

此功能允许您根据 make 当前正在构建的目标为同一变量定义不同的值。

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 $@
于 2014-03-29T23:24:15.203 回答