CMake I 指定构建类型Debug/Release

目录

一、单配置生成器CMAKE_BUILD_TYPE

1.CMakeLists.txt

2.构建

(1)Release

(2)Debug

 二、复合配置生成器CMAKE_CONFIGURATION_TYPES

1.Release版本VS2019 x64

2.Release/Debug版本VS2017 x64

(1)构建

(2)编译Release

(3)编译Debug


一、单配置生成器CMAKE_BUILD_TYPE

        CMake可以配置构建类型,例如:Debug、Release等,控制生成构建系统使用的配置变量 是 CMAKE_BUILD_TYPE 。该变量默认为空,CMake识别的值为:

  • Debug:用于在没有优化的情况下,使用带有调试符号构建库或可执行文件。
  • Release:用于构建的优化的库或可执行文件,不包含调试符号。
  • RelWithDebInfo:用于构建较少的优化库或可执行文件,包含调试符号。
  • MinSizeRel:用于不增加目标代码大小的优化方式,来构建库或可执行文件。

1.CMakeLists.txt

cmake_minimum_required(VERSION 3.5 FATAL_ERROR)

project(setType LANGUAGES CXX)

if(NOT CMAKE_BUILD_TYPE)
	set(CMAKE_BUILD_TYPE release CACHE STRING "Build Type" FORCE)
endif()

message(STATUS "Build type:${CMAKE_BUILD_TYPE}")

message(STATUS "Debug configuration:${CMAKE_CXX_FLAGS_DEBUG}")

message(STATUS "release configuration:${CMAKE_CXX_FLAGS_RELEASE}")

message(STATUS "release configuration with debug info:${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")

message(STATUS "minimal release configuration:${CMAKE_CXX_FLAGS_MINSIZEREL}")

2.构建

(1)Release

        直接cmake ..构建:

(2)Debug

        通过-D来设置CMAKE_BUILD_TYPE :

cmake -D CMAKE_BUILD_TYPE=debug ..

 二、复合配置生成器CMAKE_CONFIGURATION_TYPES

        CMake支持复合配置生成器,可以使用 CMAKE_CONFIGURATION_TYPES 变量对这些生成器的可用配置类型进行调整,CMAKE_CONFIGURATION_TYPES 变量接受一个值列表。

        使用CMAKE_BUILD_TYPE 并不能修改VS的配置,用VS打开后默认是debug x64,而使用CMAKE_CONFIGURATION_TYPES可以修改VS的默认配置。

1.Release版本VS2019 x64

cmake .. -D CMAKE_CONFIGURATION_TYPES="Release"

2.Release/Debug版本VS2017 x64

(1)构建

cmake .. -G"Visual Studio 15 2017 Win64" -D CMAKE_CONFIGURATION_TYPES="Release;Debug"

        该命令将为Release和Debug配置生成一个构建树。然后可以使用 --config 标志来决定构建这两个中的哪一个。

 (2)编译Release

cmake --build . --config Release

 (3)编译Debug

cmake --build . --config Debug

 

`CMakeLists.txt` 是 CMake 构建系统的一个关键文件,它用于配置项目的构建过程。为了区分 debugrelease 版本,你需要在 `CMakeLists.txt` 中设置一些特定的变量和选项。 1. **设置构建类型**:首先,在文件顶部添加 `CMAKE_BUILD_TYPE` 变量,例如: ```cmake cmake_minimum_required(VERSION 3.10) project(MyProject) if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Release) # 默认为 Release message(STATUS "Setting build type to 'Release'") else() message(STATUS "Build type is already set to '${CMAKE_BUILD_TYPE}'") endif() ``` 这会将默认构建类型设为 `Release`,如果已经设置了其他类型则保持不变。 2. **配置优化级别**:对于 Release 版本,你可以调整优化级别和其他编译器选项。例如,使用 `-O2` 或 `-O3` 表示不同的优化程度。而在 Debug 版本下,通常需要启用调试信息和更详细的错误检查,可以设置为 `-g`: ```cmake if(${CMAKE_BUILD_TYPE} STREQUAL "Debug") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g") # 添加调试符号 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g") endif() ``` 3. **链接库的不同版本**:如果你项目有静态或动态链接依赖,也需要针对 debugrelease 版本分别处理,比如选择不同的库文件: ```cmake if(${CMAKE_BUILD_TYPE} STREQUAL "Debug") find_library(MyLibrary_DEBUG libMyLibrary_d.lib) # 使用 debug 版本的库 elseif(${CMAKE_BUILD_TYPE} STREQUAL "Release") find_library(MyLibrary_RELEASE libMyLibrary.lib) # 使用 release 版本的库 endif() ``` 4. **生成不同目录结构**:你可以创建不同的输出目录,如 `bin/debug` 和 `bin/release`,以便存放 debugrelease 版本的可执行文件: ```cmake add_executable(MyProgram main.cpp) get_filename_component(BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR} REALPATH) install(TARGETS MyProgram RUNTIME DESTINATION bin/${CMAKE_BUILD_TYPE} LIBRARY DESTINATION lib ARCHIVE DESTINATION lib) ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烫青菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值