makefile - makefile 中的百分号有什么作用?

标签 makefile

我有一个如下所示的 makefile:

include $(patsubst %,$(src)/%/Make.tests, $(TEST_SUBDIRS))

%-test: 
       Something here

我了解它在目标规则行中的用途。第一行中的 % 符号是做什么的?它与目标规则行中的百分号有什么关系吗?

当我编写 make sometarget 时,makefile 中未作为任何规则一部分编写的行(例如此 makefile 中的第一行)是否会执行?如果是,那么执行顺序是什么?

最佳答案

正如您可以在 the GNU make manual 中读到的那样,百分比充当通配符。 patsubst 的第一个参数 function形成图案。最后一个参数中的每个项目/单词都会与该模式进行比较,如果匹配,则将其替换为第二个参数。如果模式中有通配符 (%),它将匹配任意数量的字符,并且这些字符将被复制到替换字符串中第二个参数中 % 的位置。

在您的示例中,模式只是通配符,因此它将匹配函数最后一个参数中的任何单词,并且该单词将被复制到 % 位置的替换字符串(第二个参数)中。

举个例子可能会让事情更清楚。假设 TEST_SUBDIRS 包含两个名称。

TEST_SUBDIRS := test1 test2
include $(patsubst %,$(src)/%/Make.tests, $(TEST_SUBDIRS))

这相当于以下内容。

include $(src)/test1/Make.tests $(src)/test2/Make.tests

makefile 是按顺序逐行处理的。变量赋值是“内部化的”,并且 include 语句会导致其他文件的内容按字面意思插入到该位置,然后该内容将作为 makefile 的一部分进行处理。
读入规则时会形成依赖关系图,处理整个文件后,会执行必要的配方来更新请求的目标。

关于makefile - makefile 中的百分号有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7404444/

相关文章:

c - 如何编写makefile在不同目录中生成目标文件和可执行文件?

gcc - make 和 gcc 有什么区别?

java - 具有 Jar 和包依赖项的 Makefile

macos - 在 Mac 上更新 Make 版本

c++ makefile解释(其中使用的依赖项和宏)?

makefile - 生成文件中缺少 MACHTYPE

c - 在 make 文件中包含输入语句和条件

c++ - 共享库 C++ Makefile

c++ - Makefiles : specific 'no input files' , 自动变量

c++ - Makefile - main.o 未创建,但编译正常