红帽员工展示了目标组装系统。 GNU Make 4.2 发布

理查德·WM·琼斯,作家 libguestfs,在红帽工作, 提交 新的装配实用程序 理想中,旨在消除 make 实用程序中的缺点和问题,同时保持脚本的整体简单性和可理解性。 make 实用程序设计于 1976 年,有许多概念上的缺陷;Goals 计划在不改变总体概念的情况下消除这些缺陷。
目标源代码 分发者 根据 GPLv2+ 许可。

解决了问题:

  • 仅支持一种依赖项解析策略 - “如果目标文件丢失或早于依赖项之一,则运行汇编指令。” 目标计划实施其他策略,例如检查 URL 是否存在、将修改时间与任何文件进行比较、评估包构建 巧儿,比较校验和,运行测试用例并选择性地跳过测试。
  • 在处理构建目标时,make 不会分隔文件和规则名称,因此,不会检查运行规则时是否会实际创建它声称要创建的文件。 例如,如果您有一个名为“test”的规则,该规则运行带有测试的脚本,则意外创建了名为“test”的文件,则将不再调用测试,因为 make 会认为目标已构建并且不需要任何操作(要解决 make 中的问题,您可以指定“.PHONY: test”指令)。 目标明确分隔文件和规则名称。

    红帽员工展示了目标组装系统。 GNU Make 4.2 发布

  • 只为汇编指令提供一个参数时出现问题。

    红帽员工展示了目标组装系统。 GNU Make 4.2 发布

    目标允许您使用任意数量的命名参数。 例如,您可以从名称中单独提取调试文件的符号:

    红帽员工展示了目标组装系统。 GNU Make 4.2 发布

  • 与 shell 解释器交互时出现问题。 例如,需要控制文件名和目录名中的空格转义、执行每个命令时启动单独的 shell 解释器所造成的资源浪费、“$”字符的双重解释(在 shell 和 make 中都使用),考虑到缩进。

    这些问题在目标中通过使用“%”符号代替“$”作为汇编变量(“$”仅保留用于 shell)并使用解析器来解决 拉尔(1),这要求您用引号将路径和文件名括起来,并用花括号突出显示代码块。 整个命令块在命令 shell 的一个实例中启动,并且在命令块内,允许任意代码格式,无需引用特殊空格。

    是:
    目标:foo.o bar.o
    ${CC} ${CFLAGS} $< -o $@

    后:
    “目标”:“foo.o”,“bar.o”{
    %CC %CFLAGS %< -o %@
    }

目标的其他功能:

  • 对指定任意名称和参数的可选支持:

    全部目标=:“目标”

    目标链接 =
    “目标”:“foo.o”,“bar.o”{...}

    目标编译(名称)=
    "%name.o" : "%name.c", "dep.h" { %CC %CFLAGS -c $^ -o $@ }

  • 两种启动模式:将构建目标与文件名匹配的 make 模式(例如,文件“foo.o”匹配目标“%name.o”),以及直接编译模式:

    全部目标 = : 链接

    目标链接 =
    “目标”:“foo.o”,编译(“酒吧”){...}

    目标编译(名称)=
    "%name.o" : "%name.c", "dep.h" { %CC %CFLAGS -c $^ -o $@ }

  • 装配策略由特殊规则决定,可用于确定是否需要重新装配装配目标。 如果链接到文件的存在,则通过相应的符号(规则名称的“目标”和检查文件的*文件(“目标”))明确确定。

    “目标”:“foo.o”,“bar.o”{...}

    *文件(“目标”):*文件(“foo.o”),*文件(“bar.o”){...}

  • 开发人员可以定义组装策略的任意属性。 “*file”标志是默认定义的(@{...} 表示抑制输出,“exit 99”表示需要重建):

    策略*文件(文件名)= @{
    测试 -f %文件名 || 99号出口
    对于 f,以 % 表示

    来源: opennet.ru

添加评论