Как создать решение Visual Studio 2015 из CMake - PullRequest
0 голосов
/ 27 февраля 2020

У нас есть CMakeList.txt, подготовленный для работы с такими IDE, как QT Creator, поэтому некоторые члены команды используют два разных решения: одно для Release и другое для Debug соответственно.

Я бы хотел использовать Visual Studio 2015, поэтому мне нужно создать одно решение с учетом обеих конфигураций (Release & Debug). Как правильно установить различные флаги конфигурации?

Теперь файл CMakeList выглядит следующим образом:

if(CMAKE_BUILD_TYPE STREQUAL "Debug")
    message("Debug Build")
    set(CMAKE_CXX_FLAGS "/DWIN32 /D_WINDOWS /W3 /wd4996 /wd4251 /wd4275 /wd4267 /GR /EHsc /MP")

else()
    message("Release Build")
    set(CMAKE_CXX_FLAGS "/DWIN32 /D_WINDOWS /WX /W3 /wd4996 /wd4251 /wd4275 /wd4267 /GR /EHsc /MP /Ox")
endif()

Так что я могу просто создать одно решение, добавив -D CMAKE_BUILD_TYPE = Release или Debug. Я хотел бы сгенерировать единственное решение, а затем из VS решил скомпилировать как Debug или Release.

1 Ответ

2 голосов
/ 27 февраля 2020

Visual Studio - это генератор с множеством конфигураций, поэтому вы можете легко переключаться между Release и Debug. Не нужно использовать аргумент CUSTOM_BUILD_TYPE. Кроме того, CMake предоставляет выражения генератора (например, $<$<CONFIG:Debug>: ... >) для настройки параметров конфигурации c, таких как параметры в вашем примере. Флаги очень похожи между Release и Debug, поэтому вы можете использовать выражение генератора, чтобы просто добавить дополнительные флаги Release.

Кроме того, ручное управление переменной CMAKE_CXX_FLAGS не рекомендуется. Установить эти флаги намного безопаснее и чище, используя target_compile_options():

target_compile_options(YourTarget PRIVATE
    /DWIN32 /D_WINDOWS W3 /wd4996 /wd4251 /wd4275 /wd4267 /GR /EHsc /MP
    $<$<CONFIG:Release>:/WX;/Ox>
)
...