我发现,当我每个类使用一个*.h和一个*.cpp文件时,如果有很多类,编译时间会显著增加。我已经使用预编译头和增量链接,但编译时间仍然非常长(是的,我使用了boost;)。
因此,我想出了以下的技巧:
- 将*.cpp文件定义为不可编译文件 - 将*.cxx文件定义为可编译文件 - 每个应用程序模块添加一个*.cxx文件,并在其中#包含该模块的所有*.cpp文件。
所以,我最终只有8个翻译单元,而不是100多个翻译单元。编译时间缩短了4-5倍。
缺点是你必须手动包含所有*.cpp文件(但这不是真正的维护噩梦,因为如果你忘记包含某些内容,链接器会提醒你),并且一些VS IDE的便利性不适用于这种方案,例如“转到/移动到实现”等。
所以问题是,是否有很多cpp翻译单元确实是唯一正确的方法?我的技巧是一种已知的模式,还是我漏掉了什么?
谢谢!
因此,我想出了以下的技巧:
- 将*.cpp文件定义为不可编译文件 - 将*.cxx文件定义为可编译文件 - 每个应用程序模块添加一个*.cxx文件,并在其中#包含该模块的所有*.cpp文件。
所以,我最终只有8个翻译单元,而不是100多个翻译单元。编译时间缩短了4-5倍。
缺点是你必须手动包含所有*.cpp文件(但这不是真正的维护噩梦,因为如果你忘记包含某些内容,链接器会提醒你),并且一些VS IDE的便利性不适用于这种方案,例如“转到/移动到实现”等。
所以问题是,是否有很多cpp翻译单元确实是唯一正确的方法?我的技巧是一种已知的模式,还是我漏掉了什么?
谢谢!