首先,介绍一下CMAKE_BUILD_TYPE,在CMake的官网中有一段用来指出它是用于single-configuration generators的。
这里,区分一下single-configuration generator和multi-config generator,
single-configuration generator在构建平台与环境的同时会生成构建类型,如Debug,Release,常见的在MacOSX上使用CLion时,默认情况下生成的是只有Debug构建环境的,而CLion默认使用的
是Ninja做为生成器,这里一个明显的特定是无法直接切换Debug与Release,如果要启用Release则需要构建、执行、部署,Cmake创建一个新的配置。multi-config generator则想Visual Studio一样,混合了多种
配置。
而CMAKE_BUILD_TYPE只在single-configuration generator起作用,如下这一段
在MSVC下是错误的,CMAKE_BUILD_TYPE无法在MSVC中获取值。
1 | # WARNING: This is wrong for multi-config generators because they don't use |
在multi-config generator中,只能在构建时选择构建类型,这里,
需要借助Generator expressions
1 | # Works correctly for both single and multi-config generators |
总的来说,在multi-config generator中,因为需要在构建过程中选择构建类型,直接的提供
CMAKE_BUILD_TYPE是无效的,因为构建类型是时刻在改变,这里需要借助Generator expressions
来动态修改构建类型
链接
- cmake-buildsystem
Cmake的构建系统是高等级的抽象,用于在不同的系统,不同的生成器生成构建系统,注意,CMake本身并不参与项目
构建。 - cmake-generators
Cmake generator负责生成构建系统,这是cmake的核心功能。
- cmake-generator-expressions