从一个 Visual Studio 项目构建多个版本的静态库

Posted

技术标签:

【中文标题】从一个 Visual Studio 项目构建多个版本的静态库【英文标题】:Build multiple versions of static library from one Visual Studio project 【发布时间】:2019-04-24 21:42:51 【问题描述】:

我有几个项目 A 到 F,每个项目都依赖于静态库 L。每个项目都是我的 Visual Studio 解决方案中的一个项目。

不幸的是,项目 F 需要构建稍微不同风格的静态库(目前通过在构建选项中定义预处理器指令来使用 if/endif 指令选择不同的代码段来实现,因为特殊情况代码添加了额外的项目 A-E 不关心的依赖项)。

我目前通过制作包含所有相同源文件的第二个库项目“L_withflag”来解决此问题,并且效果很好。我想知道是否有一种更简单的方法,不需要使用相同的底层代码库维护两个独立的项目。

有没有一种方法可以让静态库项目 L 构建两个输出,一个设置标志,一个不设置(例如 L.lib 和 L_withflag.lib),并允许每个项目指定它想要哪个库作为输入?

【问题讨论】:

【参考方案1】:

Visual Studio 允许您为一个解决方案提供多种构建配置。默认情况下,对于 C++,您将获得 Debug 和 Release 配置,但您可以通过转到

来添加其他配置
Build > Configuration Manager > Active Solution Configuration (pull down list) > New

选择新建时,您可以从现有配置(调试、发布)中复制设置。因此,您可以创建配置“发布 - 选项 A”、“发布 - 选项 B”,然后为每个配置编辑项目设置以设置不同的预处理器指令。

在项目设置中,您还可以设置不同的 DLL 名称和/或输出文件夹。

【讨论】:

是的,我可以添加这些额外的配置,但我需要构建这两种配置以满足我所有项目的依赖关系。我猜这使我能够分别构建两个依赖树,并且可以进行批量构建。这就是你的建议吗?

以上是关于从一个 Visual Studio 项目构建多个版本的静态库的主要内容,如果未能解决你的问题,请参考以下文章

在 Visual Studio 中为单个解决方案编译和使用多个项目

在 MS Visual Studio 2013 中构建多个项目

在多个平台的解决方案中构建 Visual Studio C++ 项目

无法使用 Visual Studio 2015 构建一个简单的项目

Visual Studio 2013 中的“每个文件”自定义构建步骤在哪里?

MSBuild:从 Visual Studio 中构建解决方案后运行目标