2011-10-10 106 views
0

我的makefile正在编译我的程序进行调试。我的意思是它通过-g -D DEBUG到编译器。我希望能够通过-ndn ot d ebug或-p对于p roduction从而从编译器中删除调试标志。要做到这一点我需要把这个进制语法的一些方法:“如果MAKEFLAGS不是第二然后设置CFLAGS到-g -D DEBUG否则保留为空”如何根据MAKEFLAG设置makefile中变量的值?

我怎样才能做到这一点?

+0

http://stackoverflow.com/questions/5127977/makefile-define-compilation-variables-based-on-target-for/5153406#51​​53406 –

+0

不是你的意思是“不是'nd'”或“不包含'nd'或'p'”? – Beta

+0

'MAKEFLAGS'是一个内置变量吗?你的意思是'MAKEFLAGS'还是你的意思是其他项目特定的变量? –

回答

1

如果你所关心的是-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 
+0

如果传递'make --warn-undefined-variables'(当使用'$(MAKEFLAGS)'而不是其他一些自定义的变量时'$(findstring nd,...)'位也会触发)。 –

+0

@EtanReisner:好点。我试图防止它,但它看起来并不像许多人对这个问题感兴趣。 – Beta

+0

这个细节实际上有点烦人,因为手册也是错的(在7.3节)。 –