C++ 在项目之间共享类,同时绕过stdafx.h依赖项
我有一个VisualStudio2010解决方案,其中包含几个非常密切相关的项目。希望摆脱复制粘贴代码共享,在项目之间共享一些公共类。我们已经尝试将对类的引用从项目a添加到项目B中,但是在共享类引用错误的stdafx.h文件的情况下出现编译错误。请注意,两个项目的预编译头都处于启用状态(默认情况下) 我们还了解到,它是使用预处理器定义的文件 此时,我们的选项似乎是构建一个静态库项目或多个项目并引用项目a和B中的项目,或者尝试将正确的stdafx.h文件预构建事件复制到共享代码子文件夹中。第三种方法是重新设计这两个项目,完全不使用stdafx.hC++ 在项目之间共享类,同时绕过stdafx.h依赖项,c++,visual-studio,code-sharing,C++,Visual Studio,Code Sharing,我有一个VisualStudio2010解决方案,其中包含几个非常密切相关的项目。希望摆脱复制粘贴代码共享,在项目之间共享一些公共类。我们已经尝试将对类的引用从项目a添加到项目B中,但是在共享类引用错误的stdafx.h文件的情况下出现编译错误。请注意,两个项目的预编译头都处于启用状态(默认情况下) 我们还了解到,它是使用预处理器定义的文件 此时,我们的选项似乎是构建一个静态库项目或多个项目并引用项目a和B中的项目,或者尝试将正确的stdafx.h文件预构建事件复制到共享代码子文件夹中。第三种方
对我来说,所有这些选择似乎都太过分了。有没有一个更简单的解决方案是我遗漏的?当我读到你的问题时,我脑海中闪现的两个问题是:
通过静态分析运行代码会突出一些可以加快编译速度的事情(forward声明vs includes,等等)。当我读到你的问题时,我脑海中闪现的两个问题是:
通过静态分析运行代码将突出显示可以加快编译速度的事情(向前声明vs包含,等等)。当我遇到这个问题时,我通过以下方法解决了它:
- 此外,您还需要更新每个解决方案以使用正确的预编译头文件。此设置位于配置属性->C/C++->预编译头文件->预编译头文件中
- 不要忘记为所有配置和平台设置此设置
- 注意安全。每个StdAfx.cpp只需要包含正确的头文件。因此,不要在1 stdafx.cpp文件中包含所有stdafx头
这仍然允许您使用PCH文件,并且您不必担心编译器使用错误的文件。如果我调用正确,VS将为您创建的任何新类使用当前指定的PCH文件名。当我遇到此问题时,我通过以下方法修复了它:
- 此外,您还需要更新每个解决方案以使用正确的预编译头文件。此设置位于配置属性->C/C++->预编译头文件->预编译头文件中
- 不要忘记为所有配置和平台设置此设置
- 注意安全。每个StdAfx.cpp只需要包含正确的头文件。因此,不要在1 stdafx.cpp文件中包含所有stdafx头
这仍然允许您使用PCH文件,并且您不必担心编译器使用错误的文件。如果我没有记错,VS将为您创建的任何新类使用当前指定的PCH文件名。我们使用原始源创建
.cxx
文件,但除外,包括“stdafx.h”
。这是实现该类的主文件
然后,我们创建单独的特定于项目的.cpp
文件,这些文件只包含(例如NumEdit.cpp
)
然后,每个项目的
debug
和release
文件夹都有特定于项目的.obj
文件。我们使用原始源创建.cxx
文件,但除外,包括“stdafx.h”
。这是实现该类的主文件
然后,我们创建单独的特定于项目的.cpp
文件,这些文件只包含(例如NumEdit.cpp
)
然后,每个项目的
debug
和release
文件夹都有特定于项目的.obj
文件。我认为,最好的选择确实是使用公共代码创建一个静态库,正如您已经发现的那样……一个解决方案是在构建时关闭预编译头。这将完全摆脱stdafx.h。您是否尝试创建一个新的筛选器,并在该筛选器中添加来自其他项目的类。这有助于明确其他项目类的来源,您可以将stdafx.h添加到该过滤器中。我认为,最好的选择确实是使用公共代码创建一个静态库,正如您已经发现的那样……一个解决方案是在禁用预编译头的情况下构建。这样就可以完全清除stdafx.h了。你有三个吗
#include "stdafx.h"
#include "\pathtoimplementation\NumEdit.cxx"