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

C++ 如何管理生成静态库和dll的构建库项目?,c++,visual-studio,dll,C++,Visual Studio,Dll,我有一个大型的VisualStudio解决方案,有大约50个项目。有StaticDebug、StaticRelease、Debug和Release的配置。dll和静态库形式都需要一些库。为了获得它们,我们使用不同的配置重新构建解决方案。Configuration Manager窗口用于设置哪些项目需要在哪些风格、静态库、动态dll或两者中构建 这可能需要相当棘手的管理,而且必须多次构建解决方案并按正确的顺序选择配置,这有点烦人。静态版本需要在非静态版本之前构建 我想知道,如果我为需要生成静态li

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

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

我想知道,如果我为需要生成静态lib和dynamcdll的项目创建了两个项目,而不是当前的方案,管理起来会更简单吗。例如:

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

我想我的问题是,在这种情况下,你对如何组织你的项目有什么建议吗


谢谢。

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

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

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

选择所有配置(左上角)

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

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

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

转到属性->配置属性->C/C++->前置器

选择调试配置(左上角)

现在编辑属性预处理器定义,并将行\u USRDLL更改为\u USRLIB

选择释放配置(左上角)

现在编辑属性预处理器定义,并将行\u USRDLL更改为\u 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

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

也许你可以检查一下像CMake这样的构建系统在这种情况下会产生什么结果。我猜它将为每个案例生成两个项目。但是,通过这种方式创建解决方案,可能会为您节省大量工作。

我使用双项目方法,尽管我通常制作32位和64位版本的东西,但本质上是一样的。你能不用两次编译就完成吗?在VS中,我不这么认为。从makefiles中,是的……但是,对于两个不同的构建,源代码中可能有一些编译指令。至少静态版本不需要DllMain。我提供了一个新的答案并删除了旧的答案one@Scott我认为最好提供3个头文件。一个用于dll版本,一个用于lib版本,两者都包括实际的API。