为什么“脱销”不是默认的?

最近我发现你可以配置Visual Studio(但对于任何编译器来说,这个问题都是一样的),以便将中间.o文件转储到源树之外的单独文件夹中,而不是每个单独的项目旁边。 这样可以很容易地将项目清理到压缩文件或其他文件。

为什么这种配置不常见? 是否有重大缺点?


这是Visual Studio中的默认设置,并且已经有相当长的一段时间了(至少早在VC ++ 6之前)。 中间目录默认与输出目录相同,而不是源目录。 这意味着所有的目标文件都放在最终输出的旁边。

事实上,如果您正在处理将编译器输出与源文件放在一起的项目,那么它需要一些jiggery-pokery。 由于VC ++默认为对象文件提供与其相应源文件相同的名称(但具有不同的扩展名),如果您有多个具有相同名称(但路径不同)的源文件,则编译每个源文件将覆盖相应的对象文件。 最后一个要编译的文件“胜出”。

自然,这打破了构建。

要求源文件名在整个项目中是全局唯一的,实际上很烦人。 您可以更改输出位置,使其包含路径; 链接器仍然做正确的事情。


这可能是一个历史答案的问题。 第一个C编译器(以及第一个C ++编译器)被编写在Unix上。 在Unix中没有任何“标准”的地方,只有少数例外。 因此,除非另有说明,否则通常的做法是将所有内容放在当前工作目录中。


我将继续“因为VS是在真空中开发的,外部世界的想法并不经常侵入,以这种方式组织构建文件在Visual Studio的第一个版本(或其非前期版本的前体),因为这一直是内部完成的方式,而且没有人从外部进来,并说“你知道,世界其他地方真的想分开中间垃圾文件和它们的实际源代码”, VS队从来没有想过这是一个问题。

这只是一个猜测,但我想不出更好的解释。

链接地址: http://www.djcxy.com/p/46895.html

上一篇: Why are "out of source" builds not the default?

下一篇: High Dimension Nearest Neighbor Search and Locality Sensitivity Hashing