CMake入门教程【核心篇】编译类型Debug、Release、MinSizeRel、RelWithDebInfo

文章目录

  • 1.说明
    • 1.1 Debug 配置
    • 1.2 Release 配置
    • 1.3 MinSizeRel 配置
    • 1.4 RelWithDebInfo 配置
  • 2.提供的编译类型
  • 3.示例
    • 结论

1.说明

CMake作为一款强大的构建系统,提供了多种编译配置选项。这些配置影响编译过程中的优化级别和调试信息的包含情况。以下是CMake提供的主要编译类型及其特点:

«abstract»
编译配置
编译优化
调试信息
Debug
无代码优化
包含详细调试信息
Release
全面代码优化
不包含调试信息
MinSizeRel
优化文件体积
不包含调试信息
RelWithDebInfo
部分代码优化
包含调试信息

1.1 Debug 配置

  • 目的:用于开发和调试阶段。

  • 特点:

    • 包含详细的调试信息,例如变量的跟踪和函数调用信息。
    • 不进行代码优化,以保证调试的准确性。
    • 生成的二进制文件体积较大,执行速度较慢。

1.2 Release 配置

  • 目的:用于生产环境的发布。

  • 特点 :

    • 进行全面的代码优化,包括性能和内存优化。
    • 不包含调试信息,减少二进制文件的体积。
    • 生成的二进制文件执行速度快,但不便于调试。

1.3 MinSizeRel 配置

  • 目的:生成最小体积的二进制文件。

  • 特点 :

    • 优化目标是减少最终生成文件的体积。
    • 不包含调试信息。
    • 适用于对程序大小有严格限制的场景,如嵌入式系统。

1.4 RelWithDebInfo 配置

  • 目的:在提供一定程度的优化的同时,还包含调试信息。

  • 特点 :

    • 在保证一定优化水平的基础上,包含部分调试信息。
    • 适合性能测试时的调试使用。
    • 二进制文件体积和执行速度介于Debug和Release配置之间。

2.提供的编译类型

  1. Release:使用-O3 -DNDEBUG标志,进行最大优化,不包含调试信息。
  2. Debug:使用-g标志,包含调试信息,不进行优化。
  3. MinSizeRel:使用-Os -DNDEBUG标志,优化二进制文件大小,不包含调试信息。
  4. RelWithDebInfo:使用-O2 -g -DNDEBUG标志,提供优化和调试信息。

3.示例

  • 项目结构

 |-📁prj06
  |-- 🎴CMakeLists.txt
  |-- 📄main.cpp

  • CMakeLists.txt
cmake_minimum_required(VERSION 3.5)
project(build_type)if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)message("Setting build type to 'RelWithDebInfo' as none was specified.")set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "Choose the type of build." FORCE)set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo")
endif()add_executable(cmake_examples_build_type main.cpp)
  • main.cpp
#include <iostream>int main(int argc, char *argv[])
{std::cout << "Hello Build Type!" << std::endl;return 0;
}
  • 设置编译类型

编译类型可以通过以下两种方法设置:

  1. 使用 cmake-gui:在cmake-gui界面中选择所需的构建类型。

  2. 使用命令行:传递编译类型到CMake配置。

    cmake .. -DCMAKE_BUILD_TYPE=Release
    
  • 设置默认编译类型
    cmake-gui示例
    在项目的CMakeLists.txt中,可以设置一个默认的编译类型,以防没有指定:
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)message("Setting build type to 'RelWithDebInfo' as none was specified.")set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "Choose the type of build." FORCE)set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo")
endif()

结论

正确理解和使用CMake中的编译类型对于软件项目的开发、调试和发布至关重要。选择合适的编译配置不仅能优化程序的性能,还能确保开发过程的高效性。通过在CMake中灵活配置编译类型,可以有效地管理项目的构建过程,满足不同阶段的需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/592697.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

技术人员的升级之路:六西格玛黑带培训的力量

在我从一名刚接触质量管理的新人成长为六西格玛黑带的过程中&#xff0c;有一个观念一直伴随着我&#xff0c;那就是改善和卓越不是一个项目&#xff0c;而是一场永无止境的旅程&#xff01; 退一步说&#xff0c;六西格玛管理带来的改变对一个组织有多么深刻呢&#xff1f;它…

10 个值得收藏的顶级手机数据恢复软件【2024年最新】

手机数据恢复&#xff0c;不要担心&#xff0c;今天就给大家分享10款数据恢复软件&#xff01; 现代人的手机中存储了许多重要数据&#xff0c;如照片、视频、消息、联系人等文件&#xff0c;如果手机损坏或数据丢失&#xff0c;这是一件非常烦恼的事情。此时&#xff0c;一款好…

教育CRM系统选型必看,CRM的这四大功能对教育企业来说必不可少

教育行业是出了名的“卷”&#xff0c;对教育企业来说&#xff0c;学生和家长也属于客户&#xff0c;培育与学生、家长的关系是成功的关键。然而&#xff0c;教育机构对CRM管理系统的需求复杂多变&#xff0c;很难找到满意的解决方案。与传统的CRM系统不同&#xff0c;教育机构…

信号可达1公里以上,Wi-Fi HaLow如何做到比传统Wi-Fi强?

随着物联网&#xff08;IoT&#xff09;技术的蓬勃发展&#xff0c;对于能够支持大量设备、长距离传输且功耗低的无线通信技术的需求日益增长。Wi-Fi HaLow&#xff08;基于IEEE 802.11ah标准&#xff09;是专为物联网需求量身定制的突破性无线解决方案。本文将深入探讨Wi-Fi H…

Zookeeper之Java客户端实战

ZooKeeper应用的开发主要通过Java客户端API去连接和操作ZooKeeper集群。可供选择的Java客户端API有&#xff1a; ZooKeeper官方的Java客户端API。第三方的Java客户端API&#xff0c;比如Curator。 接下来我们将逐一学习一下这两个java客户端是如何操作zookeeper的。 1. ZooKe…

Linux系统文件IO

Linux系统文件IO 每个系统都有自己的专属函数&#xff0c;我们习惯称其为系统函数。系统函数并不是内核函数&#xff0c;因为内核函数是不允许用户使用的&#xff0c;系统函数就充当了二者之间的桥梁&#xff0c;这样用户就可以间接的完成某些内核操作了。 在前面介绍了文件描…

【5G PHY】5G 物理层加速卡介绍

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G算力网络技术标准研究。 博客…

vue3项目创建

安装node.js vue --version &#xff08;4.5.0以上&#xff09; npm install -g vue/cli vue create 项目名称 npm run dev 启动 npm run build 打包 ———————— vite 创建工程 npm create vuelatest npm i npm run dev 启动 npm run build 打包 项目结构…

CloudQuery 的过去、现在和未来

CloudQuery (后续简称「CQ」)这个产品从设计/研发到现在&#xff0c;一晃已经 5 年多时间了&#xff0c;在不断的完善中&#xff0c;也积累了不少的社区/企业用户&#xff0c;我意识到&#xff0c;CQ 已经从一个 Idea 变成了公众软件&#xff0c;开始有它的使命、责任和价值主张…

Pycharm恢复默认设置

window 系统 找到下方目录-->删除. 再重新打开Pycharm C:\Users\Administrator\.PyCharm2023.3 你的不一定和我名称一样 只要是.PyCharm*因为版本不同后缀可能不一样 mac 系统 请根据需要删除下方目录 # Configuration rm -rf ~/Library/Preferences/PyCharm* # Caches …

算法分析与设计 第二次课外作业

算法分析与设计 第二次课外作业 文章目录 算法分析与设计 第二次课外作业一. 单选题&#xff08;共4题&#xff0c;40分&#xff09;二. 填空题&#xff08;共5题&#xff0c;50分&#xff09;三. 判断题&#xff08;共1题&#xff0c;10分&#xff09; 一. 单选题&#xff08;…

「Verilog学习笔记」异步复位同步释放

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 timescale 1ns/1nsmodule ali16 (input clk,input rst_n,input d,output reg dout );//*************code***********//reg rst0, rst1 ; always (posedge clk or negedge…

【QT搭建】搭建可以生成手机APP的环境

一.问题分析 1.在原来的QT版本上安装Android(不推荐) 此方法暂时未实践成功,记录调试过程,可跳过 如果原来安装过QT桌面级PC软件的,可能没有配置JDK和SDK就会在QT选项的设备栏目种看到报错的提示。 并且Kits的选项里面没有Android,所以解决的问题是,缺少Kit套件Andro…

drf知识-09

自定义频率类 # throttling 频率限制 # 简单方案 from rest_framework.throttling import SimpleRateThrottle class CommonThrottle(SimpleRateThrottle):rate 3/mdef get_cache_key(self, request, view):ip request.META.get(REMOTE_ADDR)return ip# 复杂方案---》通用方案…

【LeetCode-剑指offer】--15.找到字符串中所有字母异位词

15.找到字符串中所有字母异位词 方法&#xff1a;滑动窗口 class Solution {public List<Integer> findAnagrams(String s, String p) {List<Integer> ans new ArrayList<>();int m s.length(),n p.length();if(n > m){return ans;}int[] cnt1 new i…

YoloV7改进策略:AAAI 2024 最新的轴向注意力|即插即用,改进首选|全网首发,包含数据集和代码,开箱即用!

摘要 https://arxiv.org/pdf/2312.08866.pdf 本文提出了一种名为Multi-scale Cross-axis Attention(MCA)的方法,用于解决医学图像分割中的多尺度信息和长距离依赖性问题。该方法基于高效轴向注意力,通过计算两个平行轴向注意力之间的双向交叉注意力,更好地捕获全局信息。…

无人机集群反制与对抗技术探讨

源自&#xff1a;指挥与控制学报 作者&#xff1a;任 智 张 栋 唐 硕 王孟阳 李智军 “人工智能技术与咨询” 发布 摘 要 无人机集群系统是现代信息化战争体系对抗中重要的新质作战力量, 是未来网络化、智能化作战的关键发展方向. 随着无人集群系统装备实战化技术的…

第二十七章 正则表达式

第二十七章 正则表达式 1.正则快速入门2.正则需求问题3.正则底层实现14.正则底层实现25.正则底层实现36.正则转义符7.正则字符匹配8.字符匹配案例19.字符匹配案例211.选择匹配符&#xff08;|&#xff09;12.正则限定符{n}{n,m}&#xff08;1个或者多个&#xff09;*(0个或者多…

『华为云耀云服务器实战』|云服务器如何快速搭建个人博客(图文详解)

文章目录 引言一、云耀云服务器L实例介绍1.1 准备一个华为云耀云服务器1.2 重置实例密码1.3 利用xshell 远程连接 二、安装环境软件2.1 安装git准备远程拉取2.2 安装Docker 和 Docker compose 三、博客开源项目介绍3.1 操作界面展览 四、拉取项目搭建个人博客4.1 拉取项目进行配…

【linux kernel】linux的SPI框架分析

文章目录 一、linux内核中的SPI框架二、SPI核心的初始化三、SPI核心的数据结构1、struct spi_statistics2、struct spi_delay3、struct spi_device4、struct spi_driver5、struct spi_controller6、struct spi_res7、struct spi_transfer8、struct spi_message9、struct spi_bo…