我的makefile正在编译我的程序进行调试。我的意思是它通过-g -D DEBUG
到编译器。我希望能够通过-nd
的n ot d ebug或-p
对于p roduction从而从编译器中删除调试标志。要做到这一点我需要把这个进制语法的一些方法:“如果MAKEFLAGS不是第二然后设置CFLAGS到-g -D DEBUG
否则保留为空”如何根据MAKEFLAG设置makefile中变量的值?
我怎样才能做到这一点?
我的makefile正在编译我的程序进行调试。我的意思是它通过-g -D DEBUG
到编译器。我希望能够通过-nd
的n ot d ebug或-p
对于p roduction从而从编译器中删除调试标志。要做到这一点我需要把这个进制语法的一些方法:“如果MAKEFLAGS不是第二然后设置CFLAGS到-g -D DEBUG
否则保留为空”如何根据MAKEFLAG设置makefile中变量的值?
我怎样才能做到这一点?
如果你所关心的是-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
如果传递'make --warn-undefined-variables'(当使用'$(MAKEFLAGS)'而不是其他一些自定义的变量时'$(findstring nd,...)'位也会触发)。 –
@EtanReisner:好点。我试图防止它,但它看起来并不像许多人对这个问题感兴趣。 – Beta
这个细节实际上有点烦人,因为手册也是错的(在7.3节)。 –
http://stackoverflow.com/questions/5127977/makefile-define-compilation-variables-based-on-target-for/5153406#5153406 –
不是你的意思是“不是'nd'”或“不包含'nd'或'p'”? – Beta
'MAKEFLAGS'是一个内置变量吗?你的意思是'MAKEFLAGS'还是你的意思是其他项目特定的变量? –