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

Sco*_*ham 6 c++ dll visual-studio

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

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

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

  • corelib的
  • CoreDll

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

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

谢谢.

eng*_*010 3

在资源管理器中将原始项目文件复制为CoreLib.vcxproj(如果是其他 VS,请检查适当的扩展名)

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

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

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

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

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

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

转到属性->配置属性->C/C++->预处理器

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

现在编辑属性Preprocessor Definitions并将行_USRDLL更改为_USRLIB

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

现在编辑属性Preprocessor Definitions并将行_USRDLL更改为_USRLIB

在你的头文件中你应该有类似下面的内容:

#ifdef MyDll_EXPORTS
#define MyDll_API        __declspec(dllexport)
#else
#define MyDll_API        __declspec(dllimport)
#endif
Run Code Online (Sandbox Code Playgroud)

将其更改为如下所示:

#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
Run Code Online (Sandbox Code Playgroud)

现在,您的构建会生成原始 dll 和导入库以及新的静态库!