我有一个问题。我无法根据目标设置多个变量。我需要设置两个变量,例如,如果 makefile 已使用选项 cpp(目标)运行,则应设置两个变量,但我只设置了一个变量(CC)。但另一个保留为默认值。
cpp:EXTENSION=cpp
cpp:CC=g++
cpp:COMPILE
请帮忙解决这个问题。
最佳答案
I cannot set multiple variables depending on target.
在 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
的 block 。或者,可以写入 ifneq ($(filter cpp,$(MAKECMDGOALS)),)
来测试 $(filter)
的结果是否不是空字符串。了解更多信息,请参阅 GNU Make 文档中的 $(filter)
和 ifeq
。此外,关于 general function syntax 以及如何 call a custom function 。)
另一种可能性是使用多个 Makefile。在主 Makefile 中,根据目标将控制传递给特定于目标的 Makefile,例如:
cpp notcpp:
$(MAKE) -f Makefile.$@ all
使用特定于目标的 includes 也是一种流行的选择。
关于c++ - 如何在目标makefile中设置多个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26715588/