0

我有一个包含几个非常密切相关的项目的 Visual Studio 2010 解决方案。想摆脱复制粘贴代码共享并在项目之间共享一些通用类。我们尝试将项目 A 中的类的引用添加到项目 B 中,但在共享类引用错误的 stdafx.h 文件时出现编译错误。请注意,两个项目的预编译头文件都处于打开状态(默认情况下)。

我们还了解到,使用预处理器定义#ifdef 正确的 stdafx.h 文件是不可能的。

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

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

4

3 回答 3

1

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

  1. 重命名特定于其项目的所有 stdafx.h 文件(stdafx_prj_A.h、stdafx_prj_B.h 等)。
    • 此外,您需要更新每个解决方案以使用正确的预编译头文件。此设置位于配置属性 -> C/C++ -> 预编译头文件 -> 预编译头文件中。
    • 不要忘记为所有配置和平台进行此设置。
    • 注意安全。每个 StdAfx.cpp 只需要包含正确的头文件。所以不要在 1 个 StdAfx.cpp 文件中包含所有的 stdafx 标头。
  2. 将项目之间共享的任何类移动到它们自己的项目中。

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

于 2017-03-22T20:59:53.493 回答
1

当我阅读您的问题时,我脑海中直接出现的两个问题是:

  1. 关闭预编译头文件。
  2. 将公共代码编译为共享库。

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

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

于 2016-06-14T06:58:13.643 回答
0

我们使用原始源创建.cxx文件,除了#include "stdafx.h". 这是实现该类的主文件。

然后我们创建单独的项目特定.cpp文件,其中仅包含(例如NumEdit.cpp

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

然后每个项目debugrelease文件夹都有项目特定的.obj文件。

于 2017-03-22T21:11:36.263 回答