我正面临着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”目标吗?
答案 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 $@