Всегда ли CMake создает конфигурации для всех возможных конфигураций проекта?

У меня есть особая конфигурация для параметров отладки и выпуска (разные для MSVC и для GCC). Скажем, мы генерируем проект по умолчанию через cmake ... Всегда ли CMake создает конфигурации для всех возможных конфигураций проекта (отладка и выпуск) или всегда получает только один набор параметров конфигурации?


person DuckQueen    schedule 29.06.2016    source источник
comment
Думаю, это зависит от вашего генератора. Он, безусловно, выполняет все конфигурации для Visual Studio. Насчет других генераторов я не уверен.   -  person cplusplusrat    schedule 29.06.2016


Ответы (1)


Как прокомментировал @cplusplusrat, это зависит от среды генератора / сборки:

  • Для сред с несколькими конфигурациями, таких как MSVC или XCode, да.
  • Для сред с одной конфигурацией, таких как GCC, нет.

По умолчанию для сред с одной конфигурацией не используется ни Debug, ни Release (см. здесь или здесь).

Поэтому я всегда определял один CMAKE_BUILD_TYPE для сред с одной конфигурацией как дефолт. Вы также можете сделать это, например, в сценариях сборки, вызывающих CMake:

mingw_build.cmd

@ECHO off
SETLOCAL ENABLEDELAYEDEXPANSION
:: usage:
::          mingw_build.cmd <target> <config>
::                  <target> - target to be built (default: all)
::                  <config> - configuration to be used for build (default: Debug)

if NOT "%1" == "" (set CMAKE_TARGET=%1) else (set CMAKE_TARGET=all)
if NOT "%2" == "" (set CMAKE_BUILD_TYPE=%2) else (set CMAKE_BUILD_TYPE=Debug)
SET CMAKE_BINARY_DIR=%CMAKE_BUILD_TYPE%

IF NOT EXIST "%CMAKE_BINARY_DIR%\Makefile" (
    cmake -H"." -B"%CMAKE_BINARY_DIR%" -DCMAKE_BUILD_TYPE=%CMAKE_BUILD_TYPE% -G"MinGW Makefiles"
)
cmake --build %CMAKE_BINARY_DIR% --target %CMAKE_TARGET%

ENDLOCAL 

vs_x64_build.cmd

@ECHO off
SETLOCAL ENABLEDELAYEDEXPANSION
:: usage:
::          vs_x64_build.cmd <target> <config>
::                  <target> - target to be built (default: ALL_BUILD)
::                  <config> - configuration to be used for build (default: Debug)

if NOT "%1" == "" (SET CMAKE_TARGET=%1) else (SET CMAKE_TARGET=ALL_BUILD)
if NOT "%2" == "" (set CMAKE_BUILD_TYPE=%2) else (set CMAKE_BUILD_TYPE=Debug)
SET CMAKE_BINARY_DIR=x64

IF NOT EXIST "%CMAKE_BINARY_DIR%\*.sln" (
    cmake -H"." -B"%CMAKE_BINARY_DIR%" -G"Visual Studio 14 2015 Win64"
)
cmake --build "%CMAKE_BINARY_DIR%" --target "%CMAKE_TARGET%" --config "%CMAKE_BUILD_TYPE%"

ENDLOCAL 
person Florian    schedule 29.06.2016