gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:39:03 26 4
gpt4 key购买 nike

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

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

我想知道,对于我需要生成静态库和动态 dll 的项目,我创建了两个项目,而不是当前的方案,管理起来是否更简单。例如:

  • 核心库
  • CoreDll

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

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

谢谢。

最佳答案

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

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

转到 CoreLibproperties->Configuration Properties->General

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

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

将属性 Target Extension 更改为 .lib

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

进入properties->Configuration Properties->C/C++->Preprocessor

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

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

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

现在编辑属性 Preprocessor Definitions 并将行 _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

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

关于c++ - 如何管理生成静态库和 dll 的构建库项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4390270/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com