Mar*_* Ba 10 c++ precompiled-headers visual-c++
#pragma hdrstop在几个源(cpp)文件中放入(无文件名参数)的实际价值("它做什么")是什么?
请注意,MSDN文档(再一次)对我来说一样清楚.
编辑/注意:我问这个,因为这个答案和它链接的文章似乎建议.但我不明白为每个编译单元分别有一个pch文件有什么好处.
Len*_*ate 11
原始问题的答案是,在没有设置/ Yc或/ Yu的文件中使用#pragma hdrstop的目的是忽略它,因此您可以设置构建配置,该构建配置在没有预编译头和其他构建配置的情况下构建使用预编译的头文件,您无需更改所包含的代码或标头.
更多详情...
MSDN上的注释说"hdrstop pragma可以让你对预编译文件名和保存编译状态的位置进行额外的控制." 这是真的,但它并不是特别明显有多么有用......
简而言之.
诀窍是使用/ Yc和/ Yu而没有可选的头文件名; 只需选中"使用"或"创建"单选按钮,并将"直通标题"编辑框留空(或编辑项目文件...).
所以你有一个文件,可能叫做PrecompiledHeader.cpp,它包含你想要包含在预编译头文件中的头文件,并且在包含文件列表的末尾有#pragma hdrstop.这个ONE文件是用/ Yc编译的.
然后,在预编译头文件中包含的文件之后,将所有其他cpp文件与#pragma hdrstop一起使用.这些文件都是用/ Yu编译的.
这导致PrecompiledHeader.cpp构建您的(在此示例中)单个pch文件以及使用该单个pch文件的所有其他文件.
这样做的好处是你的文件中没有一个需要包含一个'全局'预编译的头部构建头文件 - 所以没有stdafx.h或其他什么.这意味着您可以设置构建配置,该构建配置构建没有预编译的头文件,其中所有#pragma hdrstop行都被忽略.
这是"好的",因为这意味着你可以拥有一个'no precomp'构建配置,可以让你快速开发(你可以更改单个头而不强迫世界重建)和其他使用预编译的"普通"配置头.