Бег 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 есть «включенные батареи», должен быть более простой способ. Выражения генератора выглядели очень многообещающе, но, похоже, это не работает так, как я пытался.
Вопрос: Как сделать так, чтобы имя библиотеки зависело от конфигурации?