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

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

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 
Другие вопросы по тегам