Скомпилируйте все разные среды выполнения C ++ для каждой возможной конфигурации с помощью CMake - PullRequest
1 голос
/ 01 августа 2020

Я пытаюсь создать решение для Visual Studio 2013 с помощью CMake, где я хочу разрешить моим конечным пользователям компилировать DLL со всеми возможными временами выполнения (из-за STL в моем интерфейсе и того факта, что ABI не то же самое ... ).

Я хочу сгенерировать решение, содержащее 4 конфигурации: DebugMD - должен быть скомпилирован как / MDd DebugMT - должен быть скомпилирован как / MTd ReleaseMD - компилируется как / MD ReleaseMT - должен быть скомпилирован как / MT

Я пытался использовать выражения генератора, но не смог заставить его правильно сгенерировать для всех конфигураций, похоже, они перезаписывают друг друга.

Я попробовал, например, следующее:

cmake_minimum_required(VERSION 3.15)

cmake_policy(SET CMP0091 NEW)

# set the project name
project(test)

# add the executable
add_executable(test test1.cpp)
    
set_property(TARGET test PROPERTY MSVC_RUNTIME_LIBRARY "$<$<CONFIG:ReleaseMT>:MultiThreaded>")
set_property(TARGET test PROPERTY MSVC_RUNTIME_LIBRARY "$<$<CONFIG:DebugMT>:MultiThreadedDebug>")
set_property(TARGET test PROPERTY MSVC_RUNTIME_LIBRARY "$<$<CONFIG:DebugMD>:MultiThreadedDLLDebug>")
set_property(TARGET test PROPERTY MSVC_RUNTIME_LIBRARY "$<$<CONFIG:ReleaseMD>:MultiThreadedDLL>")

(после изменения CMAKE_CONFIGURATION_TYPES TO «DebugMD; ReleaseMD; DebugMT; ReleaseMT; MinSizeRel; RelWithDebInfo»)

Есть ли у кого-нибудь предложения для выполнения sh этого поведение?

1 Ответ

1 голос
/ 02 августа 2020

Вы пробовали что-то подобное?

set_property(TARGET test PROPERTY MSVC_RUNTIME_LIBRARY
  "$<$<CONFIG:ReleaseMT>:MultiThreaded>"
  "$<$<CONFIG:DebugMT>:MultiThreadedDebug>"
  "$<$<CONFIG:DebugMD>:MultiThreadedDLLDebug>"
  "$<$<CONFIG:ReleaseMD>:MultiThreadedDLL>"
)

т.е. объединить все конфигурации в один вызов, поскольку set_property() не добавляет, а перезаписывает предыдущее значение ...

...