Sam*_*rsa 9 c++ precompiled-headers visual-studio-2008
我有一个框架,正在被几个项目使用(其中包括几个示例以显示框架是如何工作的).该框架具有核心,图形,物理,gui等组件.每个组件都是一个单独的库.有几种配置.
主解决方案文件使用所有可能的配置编译整个项目,以便项目可以使用库.由于框架很少被重新编译,特别是由某人(包括我)处理使用该框架的项目,因此预编译许多标头是有意义的.
最初我让每个项目/样本都有自己的预编译头,用于整个项目.每次我必须重建相同的pch(例如,Debug),所以我决定共享PCH将减少冗余PCH编译.到现在为止还挺好.我有一个项目,编译PCH和库.所有后续项目/样本现在都使用相同的PCH.这非常有效.
唯一的问题是我看到文件大小增加.这不是障碍,就好像要发布使用该框架的项目一样,它可以将自己从共享的PCH中切断并自行创建.我这样做是为了快速开发(我实际上已经创建了一个工具,可以为新项目/样本创建VS项目文件和源文件,以便于构建以及升级以前使用旧版本的项目框架的版本).
无论如何,(我假设)文件大小的增加是因为创建共享PCH的独立VS项目文件包括来自所有库的所有头文件.我的问题是我是否可以使用条件编译(#ifndef)来减少最终可执行文件的大小?或者也许以某种方式共享多个PCH文件(据我所知,这是不可能的,但我可能错了)如果我没有意义,请说出来(实际上是:))因为我对PCH文件的了解非常有限.
谢谢!
注意:为了重新迭代并清楚地说明,到目前为止,我有一个解决方案文件正在编译包括共享PCH在内的所有库.现在,如果我重新编译所有示例和项目,它们最多可以在几秒或更长时间内编译.之前,每个项目都会重新创建一个PCH文件.另外,最初我想为每个库提供PCH,但后来我发现源文件不能使用多个PCH文件,所以这个选项不可行.另一个选择是编译PCH文件的所有可能组合,但这太耗时,麻烦且容易出错.
听起来大小问题来自于使用您实际上不需要的标头,但在开发时使用这些标头仍然有意义,因为周转速度更快。
关于使用#ifndefs:预编译很粗糙。在存在差异的地方,您将失去共享预编译工作的能力。如果使用 #ifndefs 来制作您所包含内容的不同变体,即如果您有
#ifndef FOO
Run Code Online (Sandbox Code Playgroud)
然后,预编译头必须在使用该预编译头的两个文件中以不同方式定义 FOO 的点之前停止。所以#ifndef 并不能解决问题。最终结果是 FOO 必须相同,否则您将返回到为不同项目使用单独的 pch 文件。都解决不了问题。
至于共享多个 .pch 文件: .pch 文件的一个基本限制是每个 .obj 只能使用一个。当然,.pch 文件可以具有任意标头组合。你可以有一个用于 core+graphics 的 .pch,一个用于 core+physical、core+ai 等的 .pch。如果没有一个源文件需要与多个 core+one-module 进行“对话”,那么这将非常有用。时间。这对我来说听起来不太现实。这样的计划及其变体听起来像是大量的重组工作,但没有任何实际收益。您不想构建无数的组合并跟踪它们。这是可能的,但它不会节省您的时间。
在我看来,通过牺牲可执行文件大小以在开发/调试过程中实现快速周转,然后采用更慢但更精简的方式来构建实际版本,您所做的事情完全正确。
| 归档时间: |
|
| 查看次数: |
2063 次 |
| 最近记录: |