cmake 生成的vs工程,默认是Debug的编译类型,如下图所示:
有时候想要在 camke 中指定编译类型,不用每次都打开工程来手动调。
1. 常规设置
1.1 CMakeLists.txt 中指定
通过设置变量 CMAKE_BUILD_TYPE 来实现
cmake_minimum_required(VERSION 3.0)
project(HelloWorld)
set(CMAKE_BUILD_TYPE Release)
message(STATUS "Build Type: ${CMAKE_BUILD_TYPE}")
add_executable(HelloWorld main.cpp)
1.2 注意事项
- 设置
CMAKE_BUILD_TYPE
要在添加target之前进行
1.3 运行cmake时指定
cmake ../source_dir -DCMAKE_BUILD_TYPE=Release
1.4 建议使用
为了防止 CMakeLists.txt 中覆盖 cmake 运行时的指定,建议在 CMakeLists.txt 如下使用:
if("${CMAKE_BUILD_TYPE}" STREQUAL "")
set(CMAKE_BUILD_TYPE "Release")
endif()
完整如下:
cmake_minimum_required(VERSION 3.0)
project(HelloWorld)
if("${CMAKE_BUILD_TYPE}" STREQUAL "")
set(CMAKE_BUILD_TYPE "Release")
endif()
message(STATUS "Build Type: ${CMAKE_BUILD_TYPE}")
add_executable(HelloWorld main.cpp)
1.5 编译类型
- Debug
- Release
- RelWithDebInfo
- MinSizeRel
2. 针对 vs 的方案
上面的修改并不能改变vs的配置,修改vs配置要设置 CMAKE_CONFIGURATION_TYPES
变量。
核心语句如下:
if("${CMAKE_BUILD_TYPE}" STREQUAL "")
set(CMAKE_BUILD_TYPE "Release")
endif()
SET(CMAKE_CONFIGURATION_TYPES ${CMAKE_BUILD_TYPE} CACHE STRING "" FORCE)
完整如下:
cmake_minimum_required(VERSION 3.0)
project(HelloWorld)
if("${CMAKE_BUILD_TYPE}" STREQUAL "")
set(CMAKE_BUILD_TYPE "Release")
endif()
message(STATUS "CMAKE_BUILD_TYPE : ${CMAKE_BUILD_TYPE}")
SET(CMAKE_CONFIGURATION_TYPES ${CMAKE_BUILD_TYPE} CACHE STRING "" FORCE)
add_executable(HelloWorld main.cpp)
打开后效果如下:
上面配置有个缺点,就是配置中只有 "Release"了,如果还需要其他,可以修改如下,加了个 "RelWithDebInfo"的类型,如果还要加类型,则在后面添加:
if("${CMAKE_BUILD_TYPE}" STREQUAL "")
set(CMAKE_BUILD_TYPE "Release" "RelWithDebInfo")
endif()
SET(CMAKE_CONFIGURATION_TYPES ${CMAKE_BUILD_TYPE} CACHE STRING "" FORCE)
后尝试发现把
SET(CMAKE_CONFIGURATION_TYPES ${CMAKE_BUILD_TYPE} CACHE STRING "" FORCE)
替换成SET(CMAKE_CONFIGURATION_TYPES ${CMAKE_BUILD_TYPE})
也是可行的
3. 不打开vs直接生成程序
如果只是要生成Release
版的程序,不需要打开vs工程,可用如下命令去生成程序:
cmake -G "Visual Studio 14 Win64" ..
cmake --build . --target ALL_BUILD --config Release
执行完之后,便会在Release文件夹下生成Release版本的程序
网友评论