2016-06-14 98 views
0

我有一个Visual Studio 2010解决方案,其中包含几个非常密切相关的项目。想脱离复制粘贴代码共享和共享项目之间的一些共同的类。我们尝试将项目A中的类的引用添加到项目B中,但是在共享类引用错误的stdafx.h文件的情况下正在收到编译错误。请注意,两个项目都预编译了标题(默认情况下)。在解决stdafx.h依赖关系时共享项目之间的类

我们还了解到它是使用预处理器定义的not possible to #ifdef the correct stdafx.h文件。

在这一点上,它看起来像我们的选择是要么建立一个静态库项目或多个项目,并参考来自项目A & B,或尝试一些预生成事件复制正确的stdafx.h文件到共享代码子文件夹。第三是重新构建这两个项目,根本不使用stdafx.h。

所有这些选项对我来说似乎有点矫枉过正。有没有更容易的解决方案,我错过了?

+0

我认为,最好的选择是用公用代码创建一个静态库,正如您发现的那样... – Aconcagua

+1

一种解决方案是在预编译头文件关闭的情况下编译。这完全摆脱了stdafx.h。 – user4581301

+1

您是否尝试过创建新的过滤器并从该过滤器中的其他项目添加类。这可以帮助明确其他项目类的来源,并且可以将stdafx.h添加到该过滤器。 – amisam

回答

1

两个冒出直冲我的头当我读了你的问题是:

  1. 关闭预编译头。
  2. 将通用代码编译为共享库。

在您的实例1中,您可以更快速地提高生产力,但不要从项目中删除stdafx,因为这意味着必须通过项目并关闭预编译头。只需删除所有添加的内容,并保留两个项目的默认设置。已经有一段时间了,因为我必须这样做,但是我想我然后会右键单击并单独编译每个cpp文件。这会给你编译单元丢失的头文件。添加它们,然后冲洗并重复每个。

通过静态分析运行代码将突出显示可加速编译的内容(正向声明vs包含等)。

1

当我遇到了这个问题,我的固定它:

  1. 重命名具体到他们的项目(stdafx_prj_A.h,stdafx_prj_B.h等),所有的stdafx.h文件。
    • 此外,您需要更新每个解决方案以使用正确的预编译头文件。这个设置在Configuration Properties - > C/C++ - > Precompiled Headers - > Precompiled Header File中。
    • 不要忘记为所有的配置和平台设置这一套。
    • 要安全。每个StdAfx.cpp只需要包含正确的头文件。所以不要在1个StdAfx.cpp文件中包含所有的stdafx头文件。
  2. 将项目之间共享的任何类移至其自己的项目。

这仍然允许您使用PCH文件,而且您不必担心编译器使用错误的文件。如果我记得正确,VS会为您创建的任何新类使用当前指定的PCH文件名。

0

我们创建.cxx文件与原始来源除了#include "stdafx.h"除外。这是实现该类的主要文件。

然后我们创建单独的项目具体.cpp文件只包含(例如NumEdit.cpp

#include "stdafx.h" 
#include "\pathtoimplementation\NumEdit.cxx" 

然后每个项目的debugrelease文件夹具有该项目的具体.obj文件。