如何管理生成静态库和DLL的构建库项目?

时间:2010-12-08 17:14:38

标签: c++ visual-studio dll

我有一个大型的视觉工作室解决方案,有大约50个项目。有StaticDebug,StaticRelease,Debug和Release的配置。 dll和static lib形式都需要一些库。为了获得它们,我们使用不同的配置重建解决方案。 Configuration Manager窗口用于设置需要构建哪些项目的风格,静态库,动态DLL或两者。

这可能非常难以管理,并且有必要多次构建解决方案并按正确顺序选择配置有点烦人。静态版本需要在非静态版本之前构建。

我想知道,如果对于我需要生成静态lib和dynamc dll的项目,我创建了两个项目,而不是当前的方案,可能更容易管理。例如:

  • corelib的
  • CoreDll

我可以让这两个项目引用所有相同的文件并构建它们两次,或者我想知道,是否可以构建CoreLib然后让CoreDll链接它以生成dll?

我想我的问题是,您对如何在这种情况下构建项目有任何建议吗?

感谢。

2 个答案:

答案 0 :(得分:3)

将您在explorer中的原始项目文件复制为 CoreLib.vcxproj (如果其他VS检查适当的扩展名)

将CoreLib.vcxproj作为现有项目添加到您的解决方案中并保存您的解决方案。

转到 CoreLib 属性 - >配置属性 - >常规

选择所有配置(左上角)。

将属性配置类型更改为静态库

将属性目标扩展程序更改为 .lib

附加到属性中级目录,例如 \ Lib \

转到属性 - >配置属性 - > C / C ++ - > Preporcessor

选择调试配置(左上角)。

现在编辑属性预处理程序定义并将 _USRDLL 行更改为 _USRLIB

选择发布配置(左上角)。

现在编辑属性预处理程序定义并将 _USRDLL 行更改为 _USRLIB

在您的标题文件中,您应该具有以下内容:

#ifdef MyDll_EXPORTS
#define MyDll_API        __declspec(dllexport)
#else
#define MyDll_API        __declspec(dllimport)
#endif

将其更改为以下内容:

#ifdef MyDll_EXPORTS    
#ifdef _USRLIB    
#define MyDll_API    
#else    
#define MyDll_API        __declspec(dllexport)    
#endif    
#else 
// Here must deploy your own logic whether static or dynamic linking is used.
// read my comment below
#define MyDll_API        __declspec(dllimport)    
#endif

现在你的Build会生成你的原始dll并导入lib以及一个新的静态库!

答案 1 :(得分:1)

也许你可以查看像这样的CMake构建系统。我猜它会为每个案例生成两个项目。但通过这种方式创建解决方案,它可能会为您节省大量工作。