2011-01-13 33 views
0

我曾经有一个静态库,它是由我的主程序和我的测试导入的。但是,我需要在我的静态库中构建全局变量,并且无法强制Visual Studio执行此操作。有没有一种简单的方法来建立与Visual Studio 2010的构建系统的链接缝?

我想要做的事情就是编写一个项目,它编译所有常见的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不可取的,因为我被迫手动维护在生成文件头的依赖关系。

+0

文件 - >新建项目...右键单击 - >添加现有项目。 –

+0

你尝试创建一个生成文件的项目,并提供命令建立,链接,不管?你几乎可以用它做任何疯狂的事情。 –

+0

不知道我是否看到这个问题。在多个项目引用相同的源代码文件是不是远远超出他们留在同步的麻烦的问题。如果.obj文件彼此跺脚,则可能必须更改“对象文件名”设置。我会专注于初始化问题,你不应该有一个。一个小小的静态C++类实例变量可以创造奇迹。 –

回答

1

我在VS2008中完成了类似的设置,我认为在VS2010中仍然适用。

首先,我安装我的项目的层次结构,构建ProductionCodeBaseTestCodeBase。 通用界面/标题被提取到所有项目可访问的文件夹中。

然后在我的 “建设” 的项目,我手动从ProductionCodeBase添加目标文件(S)为 “发布” 配置和目标文件(S)从TestCodeBase为 “调试” 配置。

不要忘记设置项目依赖关系,以便在“Build”中链接时目标文件有效。

请注意,您可以创建项目,只有源代码编译成目标文件,而不尝试将它们连接。只需转到该工具的“工具构建顺序”,并禁用相应的链接器。

+0

+1 - 这是“工具构建顺序”? –

+0

看起来像是VS2010中删除的'.rules'文件系统的一部分。 –

+0

我只是把代码放在一个静态库(以避免链接),然后手动添加对象文件到其他项目。 –

相关问题