要使用预编译头

时间:2015-01-05 13:42:18

标签: visual-c++

我有几个项目中使用的a.cpp。其中一些使用预编译的头文件,而另一些则不使用。根据这一点,我必须添加或删除行:

#include <stdafx.h>

是否有可能以某种方式与#define一起使用以自动方式进行此操作?

UPD。 我不能使用空stdafx.h文件,以防未使用预编译头文件,因为当a.cpp放置在项目子目录libA中时,我的情况很奇怪。在这种情况下,使用预编译头的项目必须包含以下行:

#include <stdafx.h>

并且未使用PCH的项目必须包含以下行:

#include "..\stdafx.h"

反之亦然。实际上我仍然无法理解这种行为。我希望a.cpp文件对所有项目都相同。

1 个答案:

答案 0 :(得分:0)

您可以在项目设置中为使用预编译头的项目添加预处理器定义,然后根据其存在将stdafx.h包含在内。使用您的示例,libA的C ++设置应包括/D USE_PCH,然后在a.cpp中:

#ifdef USE_PCH
 #include <stdafx.h>
#else
 #include "../stdafx.h"
#endif

要确保定义和预编译的标题设置保持同步,您可以创建包含这两个设置的属性表,并将其链接到您的项目。但是,如果是我,我只会禁用库之间共享的文件的预编译头。除非PCH非常大,并且共享源的数量也非常大,否则编译时间的节省可能不会超过这种方法的维护。