If statement 如何根据MAKEFLAG设置makefile中变量的值?

If statement 如何根据MAKEFLAG设置makefile中变量的值?,if-statement,makefile,gnu-make,If Statement,Makefile,Gnu Make,我的makefile正在编译我的程序以进行调试。我的意思是它将-g-D DEBUG传递给编译器。我希望能够为not debug传递-nd,或为production传递-p,从而从编译器中删除调试标志。要做到这一点,我需要某种方法将其放入make语法:“如果MAKEFLAGS不是nd,则将CFLAGS设置为-g-d DEBUG,否则将其留空” 我该怎么做呢?如果您只关心-nd,这就可以了: ifeq (,$(findstring nd,$(MAKEFLAGS))) FOO = -g -D DEBU

我的makefile正在编译我的程序以进行调试。我的意思是它将
-g-D DEBUG
传递给编译器。我希望能够为not debug传递
-nd
,或为production传递
-p
,从而从编译器中删除调试标志。要做到这一点,我需要某种方法将其放入make语法:“如果MAKEFLAGS不是nd,则将CFLAGS设置为
-g-d DEBUG
,否则将其留空”


我该怎么做呢?

如果您只关心
-nd
,这就可以了:

ifeq (,$(findstring nd,$(MAKEFLAGS)))
FOO = -g -D DEBUG
endif
如果您还关心
-p
,它就不那么干净了:

FOO = -g -D DEBUG
ifneq (,$(findstring nd,$(MAKEFLAGS)))
FOO =
endif

ifneq (,$(findstring p,$(MAKEFLAGS)))
FOO =
endif

否您的意思是“不是'nd'”或“不包含'nd'或'p'”
MAKEFLAGS
是一个make内置变量?您是指
MAKEFLAGS
还是指其他特定于项目的变量?
$(findstring nd,…)
位也会在传递
make--warn undefined variables
时触发(使用
$(MAKEFLAGS)
而不是其他自定义变量)。@EtanReisner:Good point。我会尽量做到防弹,但看起来好像很多人对这个问题不感兴趣。这个细节实际上有点烦人,因为手册也弄错了(在第7.3节)。