运行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"
是一个多配置生成器,因此我无法应用这种技术。
我已经阅读了generator expressions,但所有示例仅显示了应用于输入参数(例如输入文件或目录)的生成器表达式。确实,像
add_library(MyLib$<$<CONFIG:Debug>:d> SHARED foo.cpp)
仅会产生令人讨厌的CMake错误消息,并且不会产生使库名称取决于配置的预期效果。
我当然可以创建一个自定义命令,该命令在安装时重命名该文件,但是据我了解,CMake具有“包括电池”,必须有一种更简单的方法。生成器表达式看起来非常有前途,但是似乎不像我尝试过的那样起作用。
问题::如何根据配置来确定库的名称?
答案 0 :(得分:1)
您可以将库目标的DEBUG_POSTFIX属性分配给调试构建使用不同的后缀。
或者您可以通过分配CMAKE_DEBUG_POSTFIX变量来对所有目标执行此操作:
set(CMAKE_DEBUG_POSTFIX "d")
#... Create a library after the setting the postfix.
add_library(MyLib SHARED foo.cpp)
答案 1 :(得分:1)
@Tsyvarev关于设置库目标的属性的提示导致了另一种解决方案:有一个目标属性OUTPUT_NAME,这确实允许使用生成器表达式。
所以,一个人可以写
set_target_properties(MyLib PROPERTIES OUTPUT_NAME "MyLib$<$<CONFIG:Debug>:d>")