gpt4 book ai didi

makefile - 使用默认目标名称 'Makefile' 制作命令

转载 作者:行者123 更新时间:2023-12-02 04:36:13 25 4
gpt4 key购买 nike

为什么下面的 makefile 使用 Makefile 目标?

生成文件 1:最初我有以下生成文件,当以 make abc xyz -s 调用时,它按预期工作。

%::
echo $@

我会得到

abc
xyz

生成文件 2:现在在添加一个名为 test 的空规则之后。

%:: test
echo $@
test:

下面的调用

make abc xyz -s

结果

Makefile
abc
xyz

即使我只给出 abcxyz 作为目标,为什么我得到 Makefile 作为我的输出?提前致谢。

最佳答案

因为 make 总是在构建实际目标之前尝试重建构建文件。如果它找到 Makefile 的规则并且它已过时,它将被重建并重新加载,并且请求的目标将根据新的 makefile 构建。这是一项功能,因此如果构建文件是自己生成的(在 autotools、cmake 和类似工具中很常见),它就不会使用陈旧的构建指令。

有关详细信息,请参阅 GNU Make Manual section 3.5

在上面的具体示例中,规则具有目标 % 并且它完全匹配任何内容,包括 Makefile。所以 make 会发现它作为重新制作 makefile 的规则,并将对其进行评估。

现在在第一种情况下 Makefile 存在并且比它的所有依赖项都要新,因为没有依赖项也不需要重新制作它的依赖项也因为没有。所以 make 会得出不需要重新制作 Makefile 的结论。

在第二种情况下 Makefile 存在,但它的依赖项 test 需要重新制作。因此 make 运行(空)规则,然后返回并运行 Makefile 的规则。因为 make 在建立依赖关系后不会检查时间戳。它只是假设当它重新制作它们时,依赖目标也需要重新制作。

关于makefile - 使用默认目标名称 'Makefile' 制作命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21928818/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com