我是制作实用程序的新手,我正在学习教程。在教程中,他们给出了一个示例,每次我们在其上运行 make 时,都会执行目标,因为未创建目标文件。
我的问题是为什么此示例中没有创建目标文件?
根据我的理解,当执行命令时,会创建目标文件。下次当 make 在文件上运行时,它会检查目标文件是否存在。如果存在,则不会再次执行命令。
我在 debian 上使用 GNU make 4.3。
some_file: other_file
echo "This will always run, and runs second"
touch some_file
other_file:
echo "This will always run, and runs first"
上面总是按该顺序执行,因为 some_file 依赖于从未创建的 other_file。为什么没有创建 other_file 文件?
根据我的理解,执行命令时,会创建目标文件。
不一定。当执行目标的命令时,结果就是这些命令所产生的效果。通常,他们应该创建一个与目标同名的文件,但这不是自动的。如果这就是 makefile 作者的意图,那么作者有责任提供实现它的方法。
在这方面,请注意
some_file
的配方和 other_file
的配方之间的一个关键区别:前者包含命令 touch some_file
,该命令将在必要时创建该文件,并在任何情况下设置其最后修改时间戳。后者不包含此类命令。
那么,
为什么没有创建 other_file 文件?
因为
other_file
的配方没有这样的效果。