有没有办法判断代码是否正在编译为PCH的一部分?

时间:2011-04-28 21:29:51

标签: visual-c++

我需要在预编译头.h文件中分支某个语句,基于.h现在是否用于创建 PCH(即包含在用/编译的cpp中) Yc),或者现在只包括使用 PCH(即包含在用/ Yu编译的cpp中)。

换句话说,我正在寻找像 -

这样的东西
#ifdef NOW_CREATING_THE_PCH
  #import yadayada_with_option_a
#else
  #import yadayada_with_option_b
#endif

......并且找不到任何东西。 任何想法将不胜感激!

谢谢,

-Ofek

[编辑:]我需要这个的原因是我使用Incredibuild,并开始获得this warning。根据常见问题解答建议,我希望在PCH创建过程中#import no_implementation,在PCH使用期间使用implementation_only

2 个答案:

答案 0 :(得分:1)

您可以专门更改stdafx.cpp(或任何使用/ Yc编译的源文件)的配置(在Visual Studio中)以定义符号NOW_CREATING_THE_PCH,并为其余源文件保留未定义的符号(用/ Yu编译。

这不是你开箱即用的东西,但如果你只需要为一个项目(或几个)做这件事,那就不是问题了。

答案 1 :(得分:0)

虽然这不是您问题的直接答案,但解决此问题的最简单方法是在头文件中使用带有#import的{​​{1}}语句,该文件用于生成预编译头文件(通常是StdAfx.h)并将头文件重新no_implementation到源文件中,用于触发使用参数#import生成pch。这样就可以定义包装函数的实现,但只能在一个地方定义。