繁体   English   中英

在预编译头中放什么? (MSVC)

[英]What to put in precompiled header? (MSVC)

预编译头文件的最佳候选者是什么? 我可以在那里放置STL和Boost标头,即使它们有模板吗? 这会减少编译时间吗? 另外,减少编译时间的最佳IDE设置是什么?

快速回答:STL和Boost标头确实属于预编译头文件,即使这些头文件定义了模板类。

生成预编译头文件时,编译器会解析头文本(一项重要任务!),并将其转换为二进制格式,该格式针对编译器的优势进行了优化。

即使在编译其他.cpp文件时将实例化模板类,它们也将从预编译头中的信息实例化,这对于编译器来说要快得多。


应该在预编译的头包括有一件事是属于您的项目的一部分,并且需要经常更换,即使每一个.cpp文件中包括这些文件的文件。

原因是这样 - 预编译头的生成可能需要很长时间,因为boost,stl和windows库非常大。

你可能有一个简单的文件(例如“StringDefs.h”),一切都使用。 recompiles. 如果StringDefs.h包含在stdafx.h中,并且一个开发人员接触StringDefs.h,那么每个开发人员都必须等到重新编译。 如果StringDefs.h被排除在预编译头之外,并且与每个.CPP文件一起解析,那将会快得多。

Andrew Shepherd的答案之一。 对于项目外部的头文件,使用预编译头,用于不经常更改的文件。 如果您一直在更改当前项目中的头文件,则可能不值得对它们进行预编译。

我写过一篇关于减少编译时间的技术的文章。 在这些技术中,可以在此处找到预编译头文件及其应用程序的帖子。 它还有一个您可能感兴趣的最佳实践部分。 包含透明处理它的CMake脚本。

将任何内容放入预编译的头文件中,无论如何该项目中的大多数.cpp文件都会包含在内。 这适用于任何头文件,真的。 这允许编译器解析这些文件一次,然后在同一项目的所有.cpp文件中重用该信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM