【问题标题】:What does a percent symbol do in a makefile?百分号在 makefile 中有什么作用?
【发布时间】:2011-11-16 07:04:32
【问题描述】:

我有一个如下所示的生成文件:

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

%-test: 
       Something here

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

当我写make sometarget 时,makefile 中没有作为任何规则的一部分写入的行(如这个makefile 中的第一行)是否被执行?如果是,那么执行顺序是什么?

【问题讨论】:

    标签: makefile


    【解决方案1】:

    正如您在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 的一部分进行处理。
    在读入规则时,会从规则中形成依赖图,在处理完整个文件后,执行必要的配方以更新请求的目标。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-02
      • 1970-01-01
      • 2023-03-16
      • 2013-04-20
      • 1970-01-01
      • 2012-09-02
      • 2012-11-19
      相关资源
      最近更新 更多