【发布时间】:2014-07-08 01:51:17
【问题描述】:
“.MAKE”出现在 gnu Makefile 中,用于许多使用 AutoMake 的软件包,但在在线手册中似乎没有记录为“特殊”目标。有人知道它是做什么的吗?
【问题讨论】:
-
你假设这是一个 GNU make 特性是错误的。 BSD make(1) 手册说:“
.MAKE执行与此目标关联的命令,即使指定了-n或-t选项。通常用于标记递归生成。”
标签: makefile
“.MAKE”出现在 gnu Makefile 中,用于许多使用 AutoMake 的软件包,但在在线手册中似乎没有记录为“特殊”目标。有人知道它是做什么的吗?
【问题讨论】:
.MAKE 执行与此目标关联的命令,即使指定了 -n 或 -t 选项。通常用于标记递归生成。”
标签: makefile
这个目标本身不会做任何事情。对我知道的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 命令(Makefile.in)生成的文件以及随后从这些命令(Makefile)生成的文件中。修正我的答案...
选择的答案不准确。 .MAKE 目标并不意味着任何人都可以执行。它对 GNU make 没有任何特殊意义,但是例如 FreeBSD 中的 make 理解 .MAKE 的先决条件是递归 make 调用。特别是,即使在执行 make -n(干运行调用)时,与它们关联的配方也会被执行,这样您就可以看到递归 make 将执行哪些命令。 GNU make 通过对 $(MAKE) 的引用或“+”标记来检测递归 make 配方。所以它是由 automake 插入的,出于兼容性目的。
【讨论】: