在解决stdafx.h依赖关系的同时在项目之间共享类

时间:2016-06-14 01:44:37

标签: c++ visual-studio code-sharing

我有一个Visual Studio 2010解决方案,其中包含几个非常密切相关的项目。想要远离复制粘贴代码共享并在项目之间共享一些常见的类。我们已经尝试将类的引用从项目A添加到项目B中,但是在共享类引用错误的stdafx.h文件时会出现编译错误。请注意,两个项目都预先打开了预编译头文件。

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

此时看起来我们的选择是构建一个静态库项目或多个项目,并从项目A和A中引用它们。 B,或者尝试将正确的stdafx.h文件的预构建事件复制到共享代码子文件夹中。第三个是重新设计两个项目,根本不使用stdafx.h。

所有这些选项对我来说都有点矫枉过正。是否有一个我想念的更简单的解决方案?

3 个答案:

答案 0 :(得分:1)

在我阅读你的问题时,直接突然出现的两个是:

  1. 关闭预编译的标题。
  2. 将公共代码编译为共享库。
  3. 在您的实例中,1可以让您更快地提高工作效率,但不要从项目中删除stdafx,因为这意味着必须通过您的项目并关闭预编译的标头。只需删除您添加的所有内容,并将其保留为两个项目的默认值。已经有一段时间了,因为我必须这样做,但我想我会然后右击并单独编译每个cpp文件。这将为您提供该编译单元缺少的头文件。加入它们,然后冲洗并重复每次。

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

答案 1 :(得分:1)

当我遇到这个问题时,我通过以下方法解决了这个问题:

  1. 重命名特定于其项目的所有stdafx.h文件(stdafx_prj_A.h,stdafx_prj_B.h等)。
    • 此外,您需要更新每个解决方案以使用正确的预编译头文件。此设置位于配置属性 - > C / C ++ - >预编译标题 - >预编译的头文件。
    • 不要忘记为所有配置和平台设置此设置。
    • 安全。每个StdAfx.cpp只需要包含正确的头文件。因此,不要在1 StdAfx.cpp文件中包含所有stdafx标头。
  2. 将项目之间共享的任何类移动到他们自己的项目中。
  3. 这仍然允许您使用PCH文件,并且您不必担心编译器使用错误的文件。如果我没记错的话VS会为你创建的任何新类使用当前指定的PCH文件名。

答案 2 :(得分:0)

我们使用 sample variant 1 HLA5 1 2 HLA7 1 的原始来源EXCEPT创建.cxx个文件。这是实现该类的主文件。

然后我们创建仅包含的单独项目特定#include "stdafx.h"文件(例如.cpp

NumEdit.cpp

然后,每个项目的#include "stdafx.h" #include "\pathtoimplementation\NumEdit.cxx" debug文件夹都包含项目特定的release文件。