在 CMake 中安装静态库的调试和发布配置

Posted

技术标签:

【中文标题】在 CMake 中安装静态库的调试和发布配置【英文标题】:Install both Debug and Release configurations of static library in CMake 【发布时间】:2020-11-15 12:57:04 【问题描述】:

我切换到catch2 3.0,它现在表示为静态库并面临其构建类型(配置)的问题。要安装 catch2,它应该使用 Release 或 Debug 配置构建,因此您将在安装路径中拥有相应的 .lib 文件。但!只有当它(项目)具有相同的配置时,我才能将它链接到我的项目。所以如果我想切换我的项目的配置,我必须用适当的配置重新安装catch2。

有没有办法解决这个问题?

【问题讨论】:

如果您使用的是 Visual Studio,您可能根本不想构建 INSTALL 目标。我不。相反,当我需要在其他项目中使用库时,我将 CMake 指向构建文件夹。 @drescherjm 感谢您的帮助!这不意味着对库路径进行硬编码吗? 否,当您在 CMake-gui 中配置应用程序而不是指向安装位置时,您指向构建第三方库的构建树的根文件夹。 为什么不使用 FetchContent() 集成 catch2,因此它将使用相同的配置构建... 【参考方案1】:

我想到了两个可能的选择:


选项 1. 将 catch2 安装到 2 个单独的目录:

构建ReleaseDebugcatch2 安装到两个不同的位置 (/path/to/rel & /path/to/debug) 在您的项目中,对于 ReleaseDebug 构建树,将 CMAKE_PREFIX_PATH 分别设置为其中之一。

此方法清晰简单,保证有效。

注意:您不必在项目中硬编码库路径,因为路径作为命令行/GUI 参数传递给 cmake。


选项 2. 使用 CMAKE_<CONFIG>_POSTFIX 区分不同的构建

这个我不太确定,但我只想指出 cmake 确实提供了这个功能。这是doc。

例如,如果您将CMAKE_DEBUG_POSTFIX 设置为-debug,则Debug 库文件将从foo 重命名为foo-debug,而Release 库仍将是foo。然后他们可以住在同一个文件夹中。

您知道,我自己从未尝试过此功能。而且我相信这有点取决于catch2 的 cmake 配置文件的质量(如果有的话)。所以 YMMV 如果你想试试这个选项。

【讨论】:

以上是关于在 CMake 中安装静态库的调试和发布配置的主要内容,如果未能解决你的问题,请参考以下文章

vs+cmake+使用静态库

如何使用cmake生成基于静态库的动态链接库

CMake-构建静态库的困难

从父 cmake 动态/静态库构建 cmake 静态库的最佳方法

CMake 学习四:CMake 构建静态库和动态库

使用cmake构建静态库的静态库