美文网首页
cmake 指定编译类型

cmake 指定编译类型

作者: book_02 | 来源:发表于2021-06-09 08:40 被阅读0次

    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 注意事项

    1. 设置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 编译类型

    1. Debug
    2. Release
    3. RelWithDebInfo
    4. 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版本的程序

    相关文章

      网友评论

          本文标题:cmake 指定编译类型

          本文链接:https://www.haomeiwen.com/subject/gxvqeltx.html