cmake - 使用多配置生成器时的 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 的理解,必须有一种更简单的方法。生成器表达式看起来很有希望,但它似乎不像我尝试过的那样工作。
问题:如何使库的名称取决于配置?
解决方案
您可以分配库目标的DEBUG_POSTFIX属性,以便为调试构建提供不同的后缀。
或者您可以通过分配CMAKE_DEBUG_POSTFIX变量对所有目标执行此操作:
set(CMAKE_DEBUG_POSTFIX "d")
#... Create a library after the setting the postfix.
add_library(MyLib SHARED foo.cpp)
推荐阅读
- redirect - CakePHP 3.x 路由与 slug
- sorting - 为什么“_.orderBy”函数不对结果进行排序?
- python - 我是 pyomo 的新手,我在向集合和参数声明数据时遇到了麻烦。我总是收到语法错误的消息
- python - 从列表中删除元素
- python - how to connect IBM cloudant database to python app code already on IBM cloud(cloud foundary)?
- firebase - How to fetch auto generated document id in firebase firestore in flutter?
- python-3.x - 将图像字节数据流解码为 JPEG
- datetime - Date with Milliseconds 'YYYY-MM-DD hh:mm:ss.SSS' for in Pyspark data from Hive
- python - 读取字符串的用户输入时出现语法错误,python
- css - Material-UI 评级组件无法正确更新星级