【问题标题】:What is the ".MAKE" target in gnu make?gnu make 中的“.MAKE”目标是什么?
【发布时间】:2014-07-08 01:51:17
【问题描述】:

“.MAKE”出现在 gnu Makefile 中,用于许多使用 AutoMake 的软件包,但在在线手册中似乎没有记录为“特殊”目标。有人知道它是做什么的吗?

【问题讨论】:

  • 你假设这是一个 GNU make 特性是错误的。 BSD make(1) 手册说:“.MAKE 执行与此目标关联的命令,即使指定了 -n-t 选项。通常用于标记递归生成。”

标签: makefile


【解决方案1】:

这个目标本身不会做任何事情。对我知道的make 没有特殊意义。

但是,它是在项目使用 GNU Automake 时自动生成的。 Automake 创建 Makefile.in 文件,which ./configure will use to generate Makefiles

它不在the targets in the documentation 中列出:只有开发人员需要它,因为它在生成的Makefile.in 中的定义显示:

.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check-am \
    ctags-recursive install-am install-strip tags-recursive

这两个变量在Makefile.in 的其他地方定义,看起来这个目标将尝试对所有可以做的事情进行完整的运行:清理源代码树,编译软件,运行自动测试,安装、卸载以及仅对开发人员有用的几个步骤。因此,这基本上是一次性测试运行,例如可以在连续构建测试期间使用。

这是为什么创建automake 的一个明显示例:make 缺少一个非常需要的功能(即告诉它“做任何事情”的能力),所以automake 提供了它。

【讨论】:

  • 谢谢 - 也许我应该更明确一点 - 在使用 AutoMake 工具(./configure、Makefile.in 等)的包中,它似乎经常出现在 .PHONY 目标旁边(其中已记录)。要选择特定示例,请参阅 wireshark-1.10.6 Makefile。我在不止一个依赖自动配置和 AutoMake 的开源项目中看到过它。
  • 啊哈!我刚刚通过在 GNU make 4.0 源代码中搜索 .MAKE 来确认这一点。它只会出现在由automake 命令(Makefile.in)生成的文件以及随后从这些命令(Makefile)生成的文件中。修正我的答案...
【解决方案2】:

选择的答案不准确。 .MAKE 目标并不意味着任何人都可以执行。它对 GNU make 没有任何特殊意义,但是例如 FreeBSD 中的 make 理解 .MAKE 的先决条件是递归 make 调用。特别是,即使在执行 make -n(干运行调用)时,与它们关联的配方也会被执行,这样您就可以看到递归 make 将执行哪些命令。 GNU make 通过对 $(MAKE) 的引用或“+”标记来检测递归 make 配方。所以它是由 automake 插入的,出于兼容性目的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-15
    • 2015-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多