3

跟进这个问题

当我这样做的时候include <iostream>
碰巧它包含了许多从/usr/include.Agrep "\usr\include"g++ -E prog.cpp大约 1260 个条目的文件;)。

他们是一种控制各种文件的方法吗?
平台:Linux
G++ 版本:4.2.4

4

3 回答 3

12

不,<iostream>包括它们,因为它直接依赖于它们,或者它的依赖关系依赖于它们。

你对此无能为力。

您可以(取决于您的编译器)通过使用预编译头文件来限制这对编译时间的影响

于 2009-12-04T17:00:08.517 回答
3

我的建议是不要担心编译器包含多少文件。更多地关注正确性、稳健性进度。如果需要考虑构建时间,请购买更快的机器、通宵构建、散步或将代码分成更小的翻译单元。翻译单元应该足够小以包含不经常更改的代码。变化是邪恶的。

构建系统的基础是仅编译已更改的少数文件。如果您的开发过程正常运行,随着项目的增长,构建时间将越来越多地停留在链接阶段。

如果编译时间仍然很长,请查看您的编译器是否支持预编译头文件。通常,这是编译器以更有效的形式存储所有声明和定义的方法。

于 2009-12-04T21:34:59.660 回答
2

当你#include <iostream>需要使用流时。那应该定义一些你需要的东西。它需要多少活动才能做到这一点是实施质量问题。您可以从中删除文件/usr/include,但这会破坏事情。

我真的怀疑它是否包含 1260 个文件。几乎可以肯定,其中大多数都是重复的条目,它们不加载任何内容,但不会从-E输出中删除。

于 2009-12-04T17:01:13.663 回答