c++ - 如何在目标makefile中设置多个变量

标签 c++ c makefile

我有一个问题。我无法根据目标设置多个变量。我需要设置两个变量,例如,如果 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/

相关文章:

c - Makefile 中的这个变量是什么?

c++ - 生成 C 和 CPP 文件的 Makefile

c++ - 是否可以在 VS2008 中的预处理器指令 block (如 #ifndef ... #endif)中启用智能感知

c# - 如何将非成员函数的地址存储在 DWORD 中 (c++)

c - 缓冲区溢出更改返回的地址

c - 为什么 execvp 的 argv 参数不是 const?

linux - 加载共享库时出错 (glew)

c++ - Qt/C++ - 跟踪所有 QList<QProcess>

c++ - 我可以在 QListWidget 的每个项目中存储一些用户数据吗?

c - 如何给字符串数组赋值?