我有一个大型的视觉工作室解决方案,有大约50个项目。有StaticDebug,StaticRelease,Debug和Release的配置。 dll和static lib形式都需要一些库。为了获得它们,我们使用不同的配置重建解决方案。 Configuration Manager窗口用于设置需要构建哪些项目的风格,静态库,动态DLL或两者。
这可能非常难以管理,并且有必要多次构建解决方案并按正确顺序选择配置有点烦人。静态版本需要在非静态版本之前构建。
我想知道,如果对于我需要生成静态lib和dynamc dll的项目,我创建了两个项目,而不是当前的方案,可能更容易管理。例如:
我可以让这两个项目引用所有相同的文件并构建它们两次,或者我想知道,是否可以构建CoreLib然后让CoreDll链接它以生成dll?
我想我的问题是,您对如何在这种情况下构建项目有任何建议吗?
感谢。
答案 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构建系统。我猜它会为每个案例生成两个项目。但通过这种方式创建解决方案,它可能会为您节省大量工作。