我有几个项目中使用的a.cpp
。其中一些使用预编译的头文件,而另一些则不使用。根据这一点,我必须添加或删除行:
#include <stdafx.h>
是否有可能以某种方式与#define
一起使用以自动方式进行此操作?
UPD。
我不能使用空stdafx.h
文件,以防未使用预编译头文件,因为当a.cpp
放置在项目子目录libA
中时,我的情况很奇怪。在这种情况下,使用预编译头的项目必须包含以下行:
#include <stdafx.h>
并且未使用PCH的项目必须包含以下行:
#include "..\stdafx.h"
反之亦然。实际上我仍然无法理解这种行为。我希望a.cpp
文件对所有项目都相同。
答案 0 :(得分:0)
您可以在项目设置中为使用预编译头的项目添加预处理器定义,然后根据其存在将stdafx.h
包含在内。使用您的示例,libA的C ++设置应包括/D USE_PCH
,然后在a.cpp中:
#ifdef USE_PCH
#include <stdafx.h>
#else
#include "../stdafx.h"
#endif
要确保定义和预编译的标题设置保持同步,您可以创建包含这两个设置的属性表,并将其链接到您的项目。但是,如果是我,我只会禁用库之间共享的文件的预编译头。除非PCH非常大,并且共享源的数量也非常大,否则编译时间的节省可能不会超过这种方法的维护。