CMake是否总是为所有可能的项目配置生成配置? [英] Does CMake always generate configurations for all possible project configurations?
问题描述
我有调试和发布选项的具体配置(不同于MSVC和GCC)。假设我们通过 cmake ..
生成默认项目。 CMake总是生成所有可能的项目配置(Debug和Release)的配置,或者总是只得到一组配置选项?
因为@cplusplusrat注释过,这取决于生成器/构建环境:
- 对于MSVC或XCode等多配置环境,是的。
配置环境既不是
调试
也不是发布
(请参阅这里或这里)。 所以我一直定义一个 CMAKE_BUILD_TYPE
作为默认配置。您也可以执行此操作。在构建脚本中调用CMake:
mingw_build.cmd
code> @ECHO off
SETLOCAL ENABLEDELAYEDEXPANSION
:: usage:
:: mingw_build.cmd< target> < config&
::< target> - 要构建的目标(默认:全部)
::< config> - 配置用于构建(默认:调试)
如果不是%1==(设置CMAKE_TARGET =%1)else(设置CMAKE_TARGET = all)
%2==(set CMAKE_BUILD_TYPE =%2)else(set CMAKE_BUILD_TYPE = Debug)
SET CMAKE_BINARY_DIR =%CMAKE_BUILD_TYPE%
如果不存在%CMAKE_BINARY_DIR%\Makefile (
cmake -H。-B%CMAKE_BINARY_DIR%-DCMAKE_BUILD_TYPE =%CMAKE_BUILD_TYPE%-GMinGW 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> - 要构建的目标(默认:ALL_BUILD)
::< config> - 如果不是%1==(SET CMAKE_TARGET =%1)else(SET CMAKE_TARGET = ALL_BUILD)
如果不使用,配置用于构建(默认:调试)
$ b %2==(set CMAKE_BUILD_TYPE =%2)else(set CMAKE_BUILD_TYPE = Debug)
SET CMAKE_BINARY_DIR = x64
如果不存在%CMAKE_BINARY_DIR%\ * .sln (
cmake -H。-B%CMAKE_BINARY_DIR%-GVisual Studio 14 2015 Win64
)
cmake --build%CMAKE_BINARY_DIR%--target %CMAKE_TARGET%--config%CMAKE_BUILD_TYPE%
ENDLOCAL
I have specific configuration for debug and release options (diferent for MSVC and for GCC). Say we generate default project via cmake ..
. Does CMake always generate configurations for all possible project configurations (Debug and Release) or one always gets only one set of comfiguration options?
As @cplusplusrat has commented, this depends on the generator/build environment:
- For multi-configuration environments like MSVC or XCode, yes.
- For single-configuration environments like GCC, no.
And the default for single-configuration environments is neither Debug
nor Release
(see here or here).
So I have always defined one CMAKE_BUILD_TYPE
for single-configuration environments as a default. You could also do this e.g. in build scripts calling 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
这篇关于CMake是否总是为所有可能的项目配置生成配置?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!