我有一个问题。我不能根据目标设置多个变量。我需要设置两个变量,例如,如果makefile已使用选项cpp(目标)运行,则应设置两个变量,但是我只设置了一个变量(CC)。但是另一个保留为默认值。
cpp:EXTENSION=cpp
cpp:CC=g++
cpp:COMPILE
请协助解决这个问题。
我不能根据目标设置多个变量。
在GNU Make中,这通常是通过分析$(MAKECMDGOALS)
变量的内容,然后根据指定的目标设置变量来实现的。
例如,一个Makefile:
ifeq ($(filter cpp,$(MAKECMDGOALS)),cpp)
MSG=make cpp was called!
endif
ifeq ($(filter notcpp,$(MAKECMDGOALS)),notcpp)
MSG=make notcpp was called!
endif
all:
@echo possible targets: cpp, notcpp; false
notcpp cpp:
@echo $(MSG)
运行make cpp
将打印make cpp was called!
。
运行make notcpp
将打印make notcpp was called!
。
(ifeq ($(filter cpp,$(MAKECMDGOALS)),cpp)
构造的说明。该$(filter)
函数cpp
在列表(第二个参数,$(MAKECMDGOALS)
)中查找单词(第一个参数,)。如果找到该单词,则将其返回。否则,将返回一个空字符串。ifeq
然后将比较结果所需$(filter)
字词的功能:如果相等,则将endif
解析/执行块til ;或者,可以编写代码ifneq ($(filter cpp,$(MAKECMDGOALS)),)
以测试的结果$(filter)
是否不是空字符串。有关更多信息,请参见$(filter)
和ifeq
在GNU Make文档中。通用函数语法以及如何调用自定义函数。)
另一种可能是使用多个Makefile。在主Makefile中,根据目标,将控件传递给特定于目标的Makefile,例如:
cpp notcpp:
$(MAKE) -f Makefile.$@ all
使用特定于目标的包含也是一种流行的选择。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句