11 我现在正在编写一个多文件程序,并且由于某种原因导致我的程序失败,显然只运行“ make”(因为在大多数情况下人们会直观地认为需要这样做)。我想我可以提供有关该问题的更多详细信息,但重要的是它在使用“ make clean”时确实可以运行。所以我想知道是否有人知道运行“ make clean”而不是“ make”的一般经验法则 c++ builds make — 黑暗圣堂武士 source
17 您可以在两种情况下运行make clean-当您想打包源代码(因此不需要/不需要构建的对象)时,或者当您出于某种原因认为构建的对象不好时。 在您的情况下,您正在使用“ make clean”来修复可能是由于有问题的Makefile导致的问题。何时应该重新编译其中的某些内容,这会导致输出二进制文件变坏。 取决于项目的复杂性和使用make的方式,有很多可能发生的原因,但是要点是:您需要花一些时间来调试Makefile。 — 迈克尔·科恩 source 6 您会忘记“构建环境中的某些更改”,例如升级的编译器,新版本的库等。在这些情况下,仅确保所有模块都在同一首歌中唱歌总是一个好主意! — James Anderson 2 @JamesAnderson一个人可能会争辩说这些仅仅是有缺陷的Makefile的实例。 — 克里斯托夫·普罗沃斯特 4 @KristofProvost:我不确定我是否将“ New ABI”(可能是通过引入新的编译器版本)分类为“ buggy Makefile”。这已经远远超出了我期望的“ make”范围。 — Vatine 2011年 1 是的,但是有可能(甚至没有那么困难)将编译器添加到makefile中作为先决条件。这足以解决问题。总而言之,这不是一个大问题,而且还是非常罕见的。我指出这一点是因为我使用(并编写了)makefile文件,该文件考虑了编译器标志等。这在makefile文件中也很少见,但是非常有用(比检查编译器更有用;)。我对良好,编写良好的Makefile的期望很高。我对平均 Makefile的期望值较低…… — Kristof Provost
8 我总体上同意迈克尔·科恩的回答。我要补充一点,您需要阅读安装文档以了解“ make clean”的实际作用。您可能需要使用不同级别的清洁,例如“ make realclean”和“ make distclean”。这些都有非正式的约定,但是没有一成不变的。 — 比尔·鲁珀特 source 2 +1:“您需要阅读安装文档以了解“清洁”的实际作用”。没有“一般规则”。您必须阅读文档。 — S.Lott
5 我了解这是您的项目,所以这是您的makefile。我的目标是,如果可能的话,请make 始终生成正确的构建。如果make clean有必要从某种状况中恢复过来,那么我认为这makefile是错误的,应予以纠正。如果您的依存关系计算正确,那么简单的make应该重新编译所有需要重新编译的内容。 — 凯文·克莱恩 source 2 我同意。在近乎无限的磁盘空间的日子里,这不再是一个问题,但是我已经足够大了,记得在创建链接的可执行文件后何时使用make clean和make realclean主要是为了节省磁盘空间。制作GCC,apache,perl等留下了很多东西。 — 比尔·鲁伯特
1 我将在每晚构建之前运行“ make clean”。在那种情况下,完成一个完整的构建所花费的额外时间可能并不重要,但是确保一切都在正确的版本中所带来的额外安全性可能是值得的。 — 扎卡里K source 那将取决于您的项目的大小。在我以前工作的地方,增量构建将需要2-4个小时,而其他站点的更改则需要一整夜。干净的构建可能需要7到9个小时。最重要的是,有时我们要建立2或3个分支。即使在快速的机器上,非常大的代码库也需要与较小的代码库区别对待。 — TafT