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

2024-01-06

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

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

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

  • CoreLib
  • CoreDll

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

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

Thanks.


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

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

前往属性->配置属性->常规 of CoreLib.

Select 所有配置(左上角)。

改变属性配置类型 to 静态库.

改变属性目标扩展 to .lib .

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

前往属性->配置属性->C/C++->预处理器

Select 调试配置(左上角)。

现在编辑属性预处理器定义并改变线路_USRDLL into _USRLIB

Select 发布配置(左上角)。

现在编辑属性预处理器定义并改变线路_USRDLL into _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 和导入库以及新的静态库!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何管理生成静态库和 dll 的构建库项目? 的相关文章

  • C++ Singleton 类 getInstance (作为 java)[重复]

    这个问题在这里已经有答案了 可能的重复 谁能给我提供一份 C 中的 Singleton 示例吗 https stackoverflow com questions 270947 can any one provide me a sample
  • 如何在C编程中获取当前时间(以毫秒为单位)[重复]

    这个问题在这里已经有答案了 可能的重复 如何使用 ANSI C 测量以毫秒为单位的时间 https stackoverflow com questions 361363 how to measure time in milliseconds
  • 使用 QTextCursor 选择一段文本

    使用 Qt 框架选择文本片段时遇到问题 例如 如果我有这个文件 没有时间休息 我想选择 ime for r 并从文档中删除这段文本 我应该如何使用 QTextCursor 来做到这一点 这是我的代码 QTextCursor cursor n
  • 无法在更新面板中找到上传的文件

    aspx
  • 使用 gcc 编译 C 时,预处理的 .i 文件中的数字意味着什么?

    我想了解编译过程 我们可以使用以下命令查看预处理器中间文件 gcc E hello c o hello i or cpp hello c gt hello i 我大致知道预处理器的作用 但我很难理解某些行中的数字 例如 1 usr incl
  • NUnit 测试运行顺序

    默认情况下 nunit 测试按字母顺序运行 有谁知道有什么方法可以设置执行顺序吗 是否存在这样的属性 我只是想指出 虽然大多数受访者认为这些是单元测试 但问题并没有具体说明它们是 nUnit 是一个很棒的工具 可用于各种测试情况 我可以看到
  • 错误 C2064:术语不计算为采用 1 个参数的函数

    class Student bool Graduate return m bGraduate class School vector
  • 优化对绑定到 DataGridView 的 DataTable 的更新

    我的应用程序中有一个显示一些数据的表单 当我第一次显示表单时 我将一些数据加载到 DataTable 中 然后将 DataTable 绑定到 DataGridView 我还启动了一个异步方法来执行一些较慢的数据库查询 当这些慢查询完成时 我
  • 了解 MVC-5 身份

    我创建了一个新的ASP NET MVC 5申请与Individual User Accounts然后更新了所有的Nuget packages在解决方案中 现在我尝试遵循一些教程中显示的一些指南 但遇到了一些问题 第一个是一个名为Applic
  • 为什么测试在 TeamCity 中运行比直接在 NUnit 中运行需要更长的时间?

    我进行了一些 C 性能测试 基本上运行两种不同的方法 并检查一种方法的运行速度是否比另一种方法快得多 当我在 NUnit 本地运行它们时 其中一个测试的运行速度是另一个测试的十倍 因此我有一个 NUnit 测试 它使用Stopwatch检查
  • 没有真正理解 std::atomic::compare_exchange_weak 和compare_exchange_strong 的逻辑

    我读了https en cppreference com w cpp atomic atomic compare exchange https en cppreference com w cpp atomic atomic compare
  • 最小对的总和

    Given 2N点 in a 2D plane 你必须将它们分组为N pairs使得所有对的点之间的距离的总和是最小可能值 所需的输出只是总和 换句话说 如果a1 a2 an分别是第一对 第二对 和第 n 对点之间的距离 则 a1 a2 a
  • 如何忽略搜索条件中的空属性

    我有一个不好的要求要做 无论如何 我必须在我的应用程序中实现它 我有一个Track class public class Track public string Name get set public string City get set
  • DLL 中的 XP 风格组合框

    我需要使用 C 和 WIN32 API 无 MFC 在 DLL 中创建 XP 风格的组合框 我设法在 DLL 中创建控件 不是以 XP 风格 我设法在带有清单的 exe 中创建 XP 样式组合框 但它在 DLL 中不起作用 为了让您的 DL
  • 如何在 C# 中通过 JavaScript 回调运行 QUnit 测试并获取测试结果?

    在我的几个项目中 我使用 MVC 模式将代码 关注点 分为 3 层 模型层和控制层都在 C 上运行 因此我使用 MSTest 或 NUnit 等测试框架来验证这些层的功能需求 对于视图层 我使用 QUnit 来测试 JavaScript 文
  • MPI_Gatherv:根数组中收到的垃圾值

    我正在尝试实施MPI Gatherv函数于C 根据我的程序 包括 root 在内的每个进程都应该创建一个大小等于 进程的等级 1 这将在所有单元格中保持进程的等级 然后这个本地数组被收集到根的 rcv array 中 不知何故 我得到了垃圾
  • vs2010 在任何类型的滚动中卡住/冻结

    我在 VS 2010 SP1 中有一个恼人的问题 当我尝试用鼠标 键盘或滚动条向上 向下滚动时 VS2010 就会变得疯狂 屏幕的某些部分会冻结 我重新启动了VS 2010 甚至重新启动了计算机 但没有任何反应 我卸载了VS2010和vs2
  • 将函数作为函数参数传递

    Unity C 似乎无法识别Func lt gt 作为函数委托的符号 那么 如何将函数作为函数参数传递呢 我有一个想法Invoke functionName 0 可能有帮助 但我不确定它是否实际上立即调用该函数 或者等待帧结束 还有别的办法
  • 检测用户是否正在滚动 dataGridView 滚动条

    我正在更新一个dataGridView与一个新的数据表使用 dataGridView1 DataSource table 但是 我不想在用户滚动 dataGridView 时执行此操作 如何检查滚动条是否正在滚动或已完成滚动 即拖动而不是单
  • 通过 OCI 调用 Oracle 存储过程并使用 C++ 中的 out ref 游标返回结果

    我想使用 OCI 接口从 C 调用 Oracle 存储过程 并使用 out SYS REF CURSOR 作为过程的参数来迭代结果 我是 OCI 新手 所以可能会遗漏一些简单的东西 大部分代码取自这里 我的存储过程是 CREATE OR R

随机推荐

  • 发送 HTTP 时的 OutputStream OutOfMemoryError

    我正在尝试将大型视频 图像文件从本地文件系统发布到 http 路径 但一段时间后遇到内存不足错误 这是代码 public boolean publishFile URI publishTo String localPath throws E
  • 有没有办法限制或限制 PostgreSql 中的用户或连接?

    我们有一个设置 其中数据库实例在多个用户之间共享 我们正在尝试对共享 PostgreSQL 实施某种形式的节流或速率限制 以便一个用户不会因消耗所有资源而导致其他用户挨饿 我们可以想到的一种方法是添加连接池并固定我们为每个租户提供的连接数量
  • C++17 中数组索引范围的并行 for 循环

    我需要更新一个 100M 元素的数组 并且希望并行执行 std for each std execution par 看起来很棒 除了更新需要根据我正在更新的索引访问其他数组的元素 最小的serial我尝试并行化的工作示例可能如下所示 fo
  • PHP/Apache 自定义文件类型处理

    我想知道是否可以为 Apache 创建由 PHP 文件处理的自定义文件类型处理 我想要完成的是创建一种自定义 phps用于在浏览器中查看代码的扩展 我正在使用 CodeMirror 来显示代码 但我希望此过程能够自动化 因为我只需更改 ph
  • 如何使 log4j syslog Appender 在一行中写入堆栈跟踪?

    我正在使用 log4j syslog 附加程序 并注意到当发生异常时 附加程序将堆栈跟踪中的每个条目写入新行 有没有一种方法可以对其进行配置 以便整个堆栈跟踪将作为一行而不是多行 我正在使用以下 log4j2 配置 该配置可以很好地发送到
  • 如何使用 ALAssetsLibrary 枚举 iOS 8 上的所有照片

    iOS 8 通过从 ALAssetsLibrary 枚举 API 中删除 相机胶卷 来破坏许多应用程序 我知道我可以使用新的照片框架获取所有照片 但我的应用程序有很多代码取决于 ALAsset 相关类 我需要保持 iOS 7 支持 有没有办
  • iOS将RotateToInterfaceOrientation正确使用

    我有一个非常简单的 UIViewController 我正在尝试弄清楚如何使用 willRotateToInterfaceOrientation 我的 UIViewController 有一个非常简单的 viewDidLoad 方法 voi
  • Oracle 使用 UNION ALL 语句 FETCH FIRST 1 ROW

    我正在尝试使用 FETCH FIRST 1 ROW 在 SQL 中创建 UNION ALL 语句 但是当我这样做时 它给了我一个错误MISSING KEYWORD 我的 SQL 如下所示 Select From tabl1 where Da
  • 内容脚本未从后台脚本接收消息 (Mv3)

    我制作了这个简单的消息传递示例 chrome 扩展 其中应该将消息从后台脚本发送到内容脚本 不幸的是 内容脚本似乎没有收到该消息 后台脚本 background js function sendMessage tabId hostname
  • VSCode:在项目中打开文件

    我正在使用 Mac OS X 和 Visual Studio Code 0 10 10 如何使用键盘在当前打开的项目中使用其部分名称打开文件 我在命令面板中找不到可以执行此操作的命令 有一个命令可以对工作文件执行此操作 请参见屏幕截图 但是
  • 在 Matlab 循环中对变量执行某些操作比不执行任何操作要快

    在分析一个简单的循环有多快的过程中 我遇到了这个奇怪的现象 对变量不执行任何操作比对其执行某些操作要慢得多 当然 这不是一个真正的问题 因为您不会经常感到编写什么都不做的代码的冲动 但这让我感到惊讶 所以我想知道是否有人理解正在发生的事情以
  • 同时保留原始变量和解构的干净方法

    有没有更干净的方法来做到这一点 至少是 ES 草案并且有 babel 插件 即 ES6 ES7 等 const a b result doSomething 我想将整体结果保留为一个单一的对象 但同时也对其进行解构 从技术上讲它是有效的 但
  • 获取参数编码

    我在 GET 请求中使用 spring mvc 和特殊字符时遇到问题 考虑以下方法 RequestMapping update public Object testMethod RequestParam String name throws
  • C 中文件范围内可变修改的数组

    我有一些这样的代码 static int a 6 static int b 3 static int Hello a b 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 但是当我编译它时 它说错误 在文件范围内可变地
  • 使用 Java-JDBC 从 Oracle 数据库读取数据时的字符编码

    我们的数据存储在 oracle 10g db 中 其中包含法语字符集 要求是使用 Java 读取数据并生成输出文件 我通过 SQL plus 检查了 Oracle db 中数据的有效性 看起来不错 从窗口 set NLS LANG AMER
  • Android 应用内购买问题

    我已使用静态响应 ID 在我的帐户中实现了应用内购买android test purchased 现在购买该商品时Toast弹出窗口说 谢谢 您的物品很快就会出现 我认为到目前为止一切都很完美 我的问题是 这是哪里做的Toast来自 我找不
  • 将简单元数据附加到 MySQL 数据库

    有没有办法将一段元数据附加到 MySQL 数据库 我正在尝试编写代码 以便在代码升级需要时自动更新数据库架构 这需要存储单个整数值 模式版本 我当然可以为其创建一个完整的表格 但这对于一个简单的数字来说似乎有点过分了 您可以使用表注释来存储
  • 如何访问默认的 iOS 声音并将其设置为通知声音?

    如何访问默认的 iOS 声音 三音 编钟 玻璃 喇叭 铃声 电子 以将其设置为本地通知声音 我已经创建了本地通知 一切正常 但使用默认声音 三音 我想使用 Chime 或其他 我只知道如何使用我自己的声音文件 localNotif soun
  • 如何从内存中删除 perl 对象

    我编写的 Perl 脚本的内存使用存在一些问题 代码如下 该脚本启动一些变量 用数据填充它们 然后再次取消定义它们 但是 删除所有内容后脚本的内存使用率仍然很高 无法包含任何数据 根据ps该脚本在前 39 秒内使用 1 027 Mb 内存
  • 如何管理生成静态库和 dll 的构建库项目?

    我有一个包含约 50 个项目的大型视觉工作室解决方案 有 StaticDebug StaticRelease Debug 和 Release 的配置 有些库需要 dll 和静态库两种形式 为了获得它们 我们使用不同的配置重建解决方案 配置管