【问题标题】:How to not add precompiled header in one of project files如何不在项目文件之一中添加预编译头文件
【发布时间】:2012-09-27 22:14:58
【问题描述】:

我遇到了这个问题,通常你们都会问我为什么,所以我先解释一下,这样你就可以回答我了,我正在研究一个至少有 500.000 行的源,但现在是我的一个源(.cpp) 文件我刚刚创建的文件不能添加预编译头文件,在这种情况下,我必须 NOT 编辑项目预编译头文件设置,显然如果我尝试编译我的在新文件中不包含 stdafx 的项目我将被 C1010 粉碎,我尝试过的是这个

StdAfx.h:

#ifndef __ABC123
//do all your includes
#endif

我的文件.cpp:

#define __ABC123
#include "StdAfx.h"
#undef __ABC123

虽然这不起作用,stdafx.h 仍然包含文件。为什么我不能在此 .cpp 文件中包含 stdafx.h 是因为 stdafx 上的某些包含与此 cpp 的包含有大量冲突。我无法修改 stdafx 包含,因为有数千个其他文件使用它,如何处理?

【问题讨论】:

  • 如果你真正的头部守卫是这样的,你可能想看看这个:stackoverflow.com/questions/228783/…
  • 预编译的标头只有在每个翻译单元中都相同时才有意义。只是在需要#ifdef 时不要使用它们,它不会起作用。编译器实际上会跳过你的#define 来蹭你的鼻子。
  • to rub your nose into it+1
  • "我不能编辑项目预编译头设置"我想开车,但我不能开车,我该怎么做
  • 你说得对,阿尔夫,这似乎根本不可能

标签: c++ c


【解决方案1】:

不可能。你把自己画到了这里的一个角落。让我解释一下。

PCH 旨在用于整个整个项目。每个翻译单元都应包含 PCH。

可以覆盖此行为,但只能通过相关翻译单元的项目设置。您已经说过,您不能编辑项目设置,从而消除了您唯一的逃生途径。

如果您真的需要这个并且没有出路,我会考虑采取诸如将非 PCH 代码移动到自己的项目中这样的激进步骤。

【讨论】:

  • 创建库有什么大不了的?
猜你喜欢
  • 2010-12-05
  • 2012-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-06
  • 2022-09-26
  • 2012-07-09
  • 1970-01-01
相关资源
最近更新 更多