我曾经有一个静态库,它由我的主程序和我的测试导入。但是,我需要构建静态库中的全局变量,并且无法强制Visual Studio执行此操作。
我想做的是创建一个编译所有常见C ++文件的项目,一个编译和链接单元测试的项目(使用常见的C ++文件),以及一个链接实际应用程序的项目。
如何在Visual Studio 2010中执行此操作?
编辑:因为已经提出澄清,这就是我的意思:
InterfaceIUse.hpp
#include <memory>
struct IInterface
{
virtual ~IInterface() {}
virtual void SomethingIDependOn() = 0;
};
std::auto_ptr<IInterface> FactoryMethod();
CodeUnderTest.cpp
#include "InterfaceIUse.hpp"
void FunctionUnderTest()
{
//Blah blah blah
}
IExistOnlyInTheMainProgram.cpp
#include "InterfaceIUse.hpp"
std::auto_ptr<IInterface> FactoryMethod()
{
//I return the real implementation of the interface.
}
IExistOnlyInTheTest.cpp
#include "InterfaceIUse.hpp"
std::auto_ptr<IInterface> FactoryMethod()
{
//I return the mock implementation of the interface.
}
这个想法是编译给定工厂的正确的.cpp实现,这将允许测试代码的依赖关系被依赖注入。
使用makefile可以很容易地使用这种链接接缝 - 但是makefile是不受欢迎的,因为我不得不在makefile中手动维护头依赖项。
答案 0 :(得分:1)
我在VS2008中做过类似的设置,我认为在VS2010中仍然适用于你。
首先,我将项目层次结构设置为构建, ProductionCodeBase 和 TestCodeBase 。 通用接口/标头被提取到所有项目都可访问的文件夹中。
然后在我的#34; Build&#34;项目,我手动将 ProductionCodeBase 中的目标文件添加到&#34; 发布&#34;配置和目标文件从 TestCodeBase 到&#34; 调试&#34;组态。
不要忘记设置项目依赖项,以便在&#34; 构建&#34;
中链接时,目标文件有效。请注意,您可以创建仅将源代码编译到目标文件中而不尝试链接它们的项目。只需转到&#34;工具构建顺序&#34;对于该特定项目并禁用相应的链接器。