首页 > 解决方案 > 使用多配置生成器时的 CMake 配置特定库名称

问题描述

cmake -G "Visual Studio 15 2017 Win64"继续运行

cmake_minimum_required(VERSION 3.10)
project(test CXX)
add_library(MyLib SHARED foo.cpp)
install(TARGETS MyLib DESTINATION $ENV{TEMP})

生成一个具有多个配置 ( Release, Debug, ...) 的项目,然后可以使用 Visual Studio 构建该项目。

问题:安装库时(即构建生成的名为 的项目INSTALL),Debug构建将愉快地覆盖Release构建,反之亦然。

我正在寻找一种方法来为每个配置创建不同的库名称,例如MyLib用于发布版本和MyLibd调试版本。

我尝试过的:使用单一配置生成器时,我会CMAKE_BUILD_TYPE为每个配置查询并为库提供不同的名称。然而"Visual Studio 15 2017 Win64",它是一个多配置生成器,因此我不能应用这种技术。

我已阅读有关生成器表达式的信息,但所有示例仅显示应用于输入参数的生成器表达式,例如输入文件或目录。事实上,像

add_library(MyLib$<$<CONFIG:Debug>:d> SHARED foo.cpp)

只会产生令人讨厌的 CMake 错误消息,并且不会产生使库名称取决于配置的预期效果。

我当然可以创建一个自定义命令,在安装时重命名文件,但是根据我对“包含电池”的 CMake 的理解,必须有一种更简单的方法。生成器表达式看起来很有希望,但它似乎不像我尝试过的那样工作。

问题:如何使库的名称取决于配置?

标签: cmake

解决方案


您可以分配库目标的DEBUG_POSTFIX属性,以便为调试构建提供不同的后缀。

或者您可以通过分配CMAKE_DEBUG_POSTFIX变量对所有目标执行此操作:

set(CMAKE_DEBUG_POSTFIX "d")
#... Create a library after the setting the postfix.
add_library(MyLib SHARED foo.cpp)

推荐阅读