是否应该使用“ make clean”而不是“ make”的通用规则?


11

我现在正在编写一个多文件程序,并且由于某种原因导致我的程序失败,显然只运行“ make”(因为在大多数情况下人们会直观地认为需要这样做)。我想我可以提供有关该问题的更多详细信息,但重要的是它在使用“ make clean”时确实可以运行。所以我想知道是否有人知道运行“ make clean”而不是“ make”的一般经验法则

Answers:


17

您可以在两种情况下运行make clean-当您想打包源代码(因此不需要/不需要构建的对象)时,或者当您出于某种原因认为构建的对象不好时。

在您的情况下,您正在使用“ make clean”来修复可能是由于有问题的Makefile导致的问题。何时应该重新编译其中的某些内容,这会导致输出二进制文件变坏。

取决于项目的复杂性和使用make的方式,有很多可能发生的原因,但是要点是:您需要花一些时间来调试Makefile。


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”。这些都有非正式的约定,但是没有一成不变的。


2
+1:“您需要阅读安装文档以了解“清洁”的实际作用”。没有“一般规则”。您必须阅读文档。
S.Lott

5

我了解这是您的项目,所以这是您的makefile。我的目标是,如果可能的话,请make 始终生成正确的构建。如果make clean有必要从某种状况中恢复过来,那么我认为这makefile是错误的,应予以纠正。如果您的依存关系计算正确,那么简单的make应该重新编译所有需要重新编译的内容。


2
我同意。在近乎无限的磁盘空间的日子里,这不再是一个问题,但是我已经足够大了,记得在创建链接的可执行文件后何时使用make clean和make realclean主要是为了节省磁盘空间。制作GCC,apache,perl等留下了很多东西。
比尔·鲁伯特

1

我将在每晚构建之前运行“ make clean”。在那种情况下,完成一个完整的构建所花费的额外时间可能并不重要,但是确保一切都在正确的版本中所带来的额外安全性可能是值得的。


那将取决于您的项目的大小。在我以前工作的地方,增量构建将需要2-4个小时,而其他站点的更改则需要一整夜。干净的构建可能需要7到9个小时。最重要的是,有时我们要建立2或3个分支。即使在快速的机器上,非常大的代码库也需要与较小的代码库区别对待。
TafT
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.