Visual c++ 有没有办法判断代码现在是否正在作为PCH的一部分进行编译?

Visual c++ 有没有办法判断代码现在是否正在作为PCH的一部分进行编译?,visual-c++,Visual C++,我需要在预编译的header.h文件中分支某个语句,这取决于.h现在是用于创建PCH(即包含在使用/Yc编译的cpp中),还是现在仅包含在使用PCH中(即包含在使用/Yu编译的cpp中) 换句话说,我正在寻找类似的东西- #ifdef NOW_CREATING_THE_PCH #import yadayada_with_option_a #else #import yadayada_with_option_b #endif …什么也找不到。 任何想法都将不胜感激 谢谢 -奥菲克 [编辑

我需要在预编译的header.h文件中分支某个语句,这取决于.h现在是用于创建PCH(即包含在使用/Yc编译的cpp中),还是现在仅包含在使用PCH中(即包含在使用/Yu编译的cpp中)

换句话说,我正在寻找类似的东西-

#ifdef NOW_CREATING_THE_PCH
  #import yadayada_with_option_a
#else
  #import yadayada_with_option_b
#endif
…什么也找不到。 任何想法都将不胜感激

谢谢

-奥菲克


[编辑:]我之所以需要它,是因为我使用了IncredBuild,并且已经开始使用它。根据常见问题解答的建议,我希望在PCH创建期间和PCH使用期间使用导入。

虽然这不是对您问题的直接回答,但解决此问题的最简单方法是在头文件中使用
\import
语句和
no_implementation
,该头文件用于生成预编译头文件(通常为StdAfx.h)然后将头文件重新导入源文件,该源文件用于触发pch的生成,参数仅为
实现
。这样定义包装函数的实现,但仅在一个位置。

虽然这不是对您问题的直接回答,但这是最简单的解决方法这个问题是在头文件中使用
#import
语句,该头文件用于生成预编译头文件(通常是StdAfx.h)并将头文件重新导入源文件,该源文件用于触发pch的生成,参数仅为
implementation\u
。这样定义了包装函数的实现,但只在一个位置进行定义。

您可以具体更改stdafx.cpp的配置(在Visual Studio中)(或使用/Yc编译的任何源文件)来定义符号,现在创建了\u PCH,剩下的源文件(使用/Yu编译)未定义符号


这不是现成的,但如果您只需要为一个项目(或几个项目)执行,这不是问题。

您可以专门更改stdafx.cpp(或使用/Yc编译的任何源文件)的配置(在Visual Studio中)要立即定义符号,请创建\u PCH,其余源文件(使用/Yu编译)不定义符号


这不是现成的,但是如果你只需要为一个项目(或几个项目)做这件事,这不是一个问题。

很有趣。你能告诉我们为什么这些需要不同吗?当然可以-只是编辑了这个问题。IIRC,你可以特别更改stdafx.cpp的配置(在Visual Studio中)(或使用/Yc编译的任何源文件)来定义符号,现在创建符号。这不是现成的,但如果您只需要为一个项目(或几个项目)执行此操作,这不是问题。@Boaz-谢谢!非常简单。如果你把它作为一个答案,我会接受。有趣。你能告诉我们这些需要不同的原因吗?当然可以-只是编辑了这个问题。IIRC,你可以特别更改stdafx.cpp的配置(在Visual Studio中)(或使用/Yc编译的任何源文件)来定义符号,现在创建符号。这不是现成的,但如果您只需要为一个项目(或几个项目)执行此操作,这不是问题。@Boaz-谢谢!令人尴尬的简单。如果你把它作为一个答案,我会接受。谢谢你的建议,但这些是很多(数百)个来源。我想我会同意@Boaz的评论。谢谢你的建议,但这些是很多(数百)个来源。我想我会同意@Boaz的评论。