Cmake之2.4版本重要特性及用法实例(十)

简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者

新书发布:《Android系统多媒体进阶实战》🚀
优质专栏: Audio工程师进阶系列原创干货持续更新中……】🚀
优质专栏: 多媒体系统工程师系列原创干货持续更新中……】🚀
优质视频课程:AAOS车载系统+AOSP14系统攻城狮入门视频实战课 🚀

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

更多原创,欢迎关注:Android系统攻城狮

欢迎关注Android系统攻城狮

🍉🍉🍉文章目录🍉🍉🍉

    • 🌻1.前言
    • 🌻2.Cmake2.4介绍
    • 🌻3.代码实例
      • 🐓3.1. 支持 "out-of-source" 构建
      • 🐓3.2. 更好的 Find 模块支持
      • 🐓3.3. 改进的内置变量和函数支持
      • 🐓3.4. 引入 ADD_CUSTOM_COMMAND 和 ADD_CUSTOM_TARGET
      • 🐓3.5. 改进了 CTest 测试框架
      • 🐓3.6. 支持构建多个输出目标

🌻1.前言

本篇目的:Cmake之2.4版本重要特性及用法实例

🌻2.Cmake2.4介绍

CMake 2.4 版本发布于 2006 年,是 CMake 系列中的一个里程碑版本。与前一个版本相比,CMake 2.4 引入了众多新特性和改进,极大地提升了其在复杂项目中的实用性和易用性。以下是 CMake 2.4 版本的重要特性:

1. 增强的跨平台支持
CMake 2.4 进一步扩展了其跨平台能力,尤其是在处理不同编译器和操作系统方面。它为更多的编译器和 IDE 提供了更好的支持,如 Eclipse、Code::Blocks 等。这使得开发者在各种开发环境中更轻松地集成 CMake,进一步增强了其通用性。

2. 改进的依赖管理
CMake 2.4 在依赖管理方面进行了显著改进,引入了更强大的模块查找机制。通过改进 FindPackage 和新增的 FindXXX 模块,CMake 2.4 使得库和依赖项的自动检测和配置更加可靠。开发者可以更方便地处理第三方库的链接和使用,减少了手动配置的复杂性。

3. 支持导出构建目标
CMake 2.4 引入了导出构建目标的功能,使得库的接口可以被更好地管理和重用。开发者可以通过 install(EXPORT) 命令将项目的构建目标导出为其他项目所使用。这一特性特别适用于开发库和框架,因为它简化了库的发布和重用流程。

4. 支持构建目录中的“out-of-source”构建
在 CMake 2.4 中,支持和推广了“out-of-source”构建方式,即将生成的构建文件(如 Makefile、编译输出等)放在项目源代码目录之外。这一特性能够有效地保持源代码目录的整洁,减少因编译而产生的临时文件对源代码的影响,便于版本控制管理。

5. 引入脚本模式和命令行增强
CMake 2.4 增强了其脚本模式,允许开发者通过命令行执行更复杂的构建配置任务。新增的命令行选项使得用户能够更灵活地定义和控制构建过程,例如可以使用 cmake -E 命令执行文件操作和其他辅助任务。这提高了 CMake 在自动化构建脚本中的可用性。

6. CTest 和 CDash 集成
CMake 2.4 版本加强了与 CTest 和 CDash 的集成。CTest 是 CMake 自带的测试框架,而 CDash 是一个持续集成仪表盘工具。通过这两个工具的结合,开发者可以自动化运行测试并将结果上传至 CDash,进行可视化展示和分析。这一特性对大规模项目的持续集成和质量控制至关重要。

7. 改进的文档生成工具(Doxygen 支持)
CMake 2.4 开始更好地支持 Doxygen,这是一款广泛使用的文档生成工具。通过整合 Doxygen,开发者可以在 CMake 项目中更容易地生成项目文档,使文档生成过程与项目构建过程紧密结合,有助于保持文档的及时更新。

8. 性能优化与稳定性提升
CMake 2.4 对核心功能进行了优化,提升了整体性能,尤其是在处理大型项目时更加高效。同时,CMake 2.4 修复了许多 bug,提升了构建过程的稳定性。性能的提升和稳定性的增强使得 CMake 能够更加胜任复杂项目的构建需求。

🌻3.代码实例

CMake 2.4 版本发布于 2006 年,为构建系统引入了许多新的特性和改进。以下是 CMake 2.4 版本中的关键特性及每个功能的文件示例:

🐓3.1. 支持 “out-of-source” 构建

  • 功能描述: CMake 2.4 强调并支持 “out-of-source” 构建模式,这种模式将构建文件与源代码分离,使得源目录更加干净,并允许同时进行多个构建配置(如调试和发布)。
  • 文件例子:
    # 创建构建目录并在其中运行 CMake
    mkdir build
    cd build
    cmake ../
    make
    

🐓3.2. 更好的 Find 模块支持

  • 功能描述: CMake 2.4 对 FindXXX.cmake 模块进行了改进,这些模块用于查找系统中的库和工具。通过改进,CMake 可以更准确地找到依赖项,并且支持更多的第三方库。
  • 文件例子:
    # CMakeLists.txt
    project(FindLibraryExample)
    find_package(Boost REQUIRED)
    add_executable(App main.cpp)
    target_link_libraries(App ${Boost_LIBRARIES})
    

🐓3.3. 改进的内置变量和函数支持

  • 功能描述: CMake 2.4 引入了更多的内置变量和函数,扩展了 CMake 脚本的功能。新变量和函数使开发者能够更加灵活地配置项目,例如控制编译选项、设置目标属性等。
  • 文件例子:
    # CMakeLists.txt
    project(AdvancedVariables)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra")
    add_executable(AdvancedApp main.cpp)
    

🐓3.4. 引入 ADD_CUSTOM_COMMAND 和 ADD_CUSTOM_TARGET

  • 功能描述: CMake 2.4 引入了 ADD_CUSTOM_COMMANDADD_CUSTOM_TARGET,允许开发者自定义构建过程。例如,可以在构建过程中自动生成代码或执行其他自定义操作。
  • 文件例子:
    # CMakeLists.txt
    project(CustomCommandsExample)# 自定义命令生成文件
    add_custom_command(OUTPUT generated_file.cppCOMMAND echo "int main() { return 0; }" > generated_file.cppDEPENDS input.txt
    )# 自定义目标依赖该文件
    add_custom_target(GenerateFile ALL DEPENDS generated_file.cpp)add_executable(App generated_file.cpp)
    

🐓3.5. 改进了 CTest 测试框架

  • 功能描述: CMake 2.4 对 CTest 测试框架进行了改进,增加了更好的测试支持和报告功能。现在开发者可以更好地集成自动化测试,并生成详细的测试报告。
  • 文件例子:
    # CMakeLists.txt
    project(CTestExample)
    add_executable(TestApp main.cpp)enable_testing()
    add_test(NAME SimpleTest COMMAND TestApp)# 添加测试报告配置
    set(CTEST_OUTPUT_ON_FAILURE TRUE)
    
    运行测试的命令:
    ctest
    

🐓3.6. 支持构建多个输出目标

  • 功能描述: CMake 2.4 支持单个构建过程中生成多个输出目标,例如构建多个可执行文件或库。通过 ADD_LIBRARYADD_EXECUTABLE,开发者可以在同一个项目中定义多个目标。
  • 文件例子:
    # CMakeLists.txt
    project(MultiTargetExample)
    add_library(MyLib lib.cpp)
    add_executable(App main.cpp)
    target_link_libraries(App MyLib)
    

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

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

相关文章

S3C2440开发板:时钟,PWM定时器控制蜂鸣器发声

时钟 时钟和电源管理模块由三部分组成:时钟控制,USB 控制和电源控制。 S3C2440A 中的时钟控制逻辑可以产生必须的时钟信号,包括 CPU 的 FCLK,AHB 总线外设的 HCLK 以及 APB 总线外设的 PCLK。S3C2440A 包含两个锁相环&#xff08…

数据结构:(LeetCode203)移除链表元素

给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 示例 1: 输入:head [1,2,6,3,4,5,6], val 6 输出:[1,2,3,4,5]示例 2: 输入&#xff1…

深度学习之 OpenCV 图像边缘检测算法解析及代码演示

引言 在计算机视觉领域,边缘检测是一种重要的图像预处理技术,用于识别图像中对象的边界。边缘检测有助于提取图像的关键特征,这对于后续的图像分析(如物体识别、运动检测等)至关重要。OpenCV 是一个强大的计算机视觉库…

这个俄罗斯平台爆火跨境圈,据说大卖已冲!无货源卖家又行了?

近几年,俄罗斯电商市场的增长速度非常惊人,从宏观来看,俄罗斯已经超越东南亚各国,成为2023年网上零售销售额增长最快的国家。据权威数据分析机构Statista的预测,2024年俄罗斯电子商务市场的收入预计能够达到337.6亿美元…

11、Django Admin启用对计算字段的过滤

重新定义admin.py中的Hero管理模型如下: admin.register(Hero) class HeroAdmin(admin.ModelAdmin):list_display ("name", "is_immortal", "category", "origin", "is_very_benevolent")list_filter ("…

代码随想录算法训练营第32天 动态规划part01| 题目:理论基础 、 509. 斐波那契数 、70. 爬楼梯 、 746. 使用最小花费爬楼梯

代码随想录算法训练营第32天 动态规划part01| 题目:理论基础 、 509. 斐波那契数 、70. 爬楼梯 、 746. 使用最小花费爬楼梯 文章来源:代码随想录 理论 题目名称:509. 斐波那契数 斐波那契数,通常用 F(n) 表示,形成的…

沐渥科技:两显氮气柜和三显氮气柜要怎么选择?

两显氮气柜通常指的是控制面板上有两个LED数码显示界面,用于显示温度和湿度;三显氮气柜则有三个LED数码显示界面,能够直观地显示出温度、湿度和含氧量。这样的设计便于用户快速全面地了解柜内环境状态,不需要额外的操作即可掌握所…

PHP智能匹配轻松预订自习室在线订座系统小程序源码

智能匹配,轻松预订——自习室在线订座系统 📚【开篇:告别排队,迎接智能学习新时代】📚 还在为找不到合适的自习室座位而烦恼吗?是不是每次去图书馆或自习室都要提前好久去排队占位?现在&#…

不同大模型代码解释对比

包含ChatGPT,讯飞星火,通义千问,腾讯元宝,智谱清言。 目标是想让大模型解释一个用于预处理人体骨骼关节三维坐标数据样本进行填补空帧的Python函数。 def f_padding_none(data):s data.copy()# print(pad the null frames with…

笔记整理—uboot番外(6)针对x210的网卡说明

对于x210而言,在三星中与九鼎官方的uboot都默认使用了二号串口。详见CONFIG_SERIALn(n1~4)。 更改串口后,应先插回原串口,进行iROM打印,内部iNnad校验核失败的信息,之后再插入其串口进行启动。 …

win10添加右键菜单打开VSCode

当进入一个文件夹后,想右键直接打开我的工程,用发现没有vscode项。本文就来介绍如何右键通过vsCode打开项目。步骤1:在桌面新建一个txt文档,用文本编辑器打开 步骤2: 查看vscode所在位置 在桌面找到vscode快捷键图标&…

EasyExcel 文件导出 - 合并某些列值相同的行

文章目录 EasyExcel 文件导出 - 合并某些列值相同的行最终效果实现思路创建单元格合并的策略类使用 EasyExcel 文件导出 - 合并某些列值相同的行 在数据处理与文件导出的过程中,我们常常会遇到各种特定的需求。今天,我们就来探讨一下使用 EasyExcel 进行…

【STM32+HAL库】---- 硬件IIC驱动0.96OLED

硬件开发板:STM32G0B1RET6 软件平台:cubemaxkeilVScode内容原著声明 代码借鉴学习于以下文章: STM32 使用硬件IIC驱动0.96寸4针IOLED显示器(HAL库) 1 新建cubemax工程 1.1 配置系统时钟RCC 1.2 配置引脚 1.3 导出工…

【盖世汽车-注册安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…

SQLite3 数据库

一、SQLite3 命令 1. 基本命令 .tables:用于查看数据库中的表。.headers on/off:开启或者关闭表头,方便查看表结构。.mode column:使列对齐,增强数据的可读性。.width 列宽1 列宽2:设置每一列的列宽&…

抖音无水印视频下载

抖音想必大家都不陌生,大家经常会在抖音上刷到各种有意思的视频,但是我们想保存就会发现会有水印信息,那么我们要如何下载无水印的图片呢? 使用说明 我们可以先点击抖音的分享按钮,复制一下视频的链接 然后打开智游剪…

Spring6梳理5——基于XML管理Bean环境搭建

以上笔记来源: 尚硅谷Spring零基础入门到进阶,一套搞定spring6全套视频教程(源码级讲解)https://www.bilibili.com/video/BV1kR4y1b7Qc 目录 ①搭建模块 ②引入配置文件 ③创建BeanXML文件 ④创建Java类文件(User…

pycharm项目里有中文右下角修改无效怎么办 包括注释里有中文

在我们编写pycharm项目时,可能会遇到项目里面有中文运行导致报错,即使我们在右下角修改编码格式,还是无效的 解决办法:点击左上角File,Settings,找到Editor里面的File Encodings ,圈住的位置都要改为UTF-8点击Apply就可以了

NAT技术-将多个内部网络设备映射到一个公共IP地址

问题: 今天上课的时候老师让我们在VMware填同一个子网ip 192.168.196.0,然后给我们的linux镜像都是同一个压缩包,结果我们的静态ip地址都是同一个。 192.168.196.0下面有256个ip地址,范围是192.168.196.0到192.168.196.255。我们…

浏览器百科:网页存储篇-Session storage应用实例(九)

1.引言 在前面的文章中,我们详细介绍了如何在 Chrome 浏览器中打开并使用 Session storage 窗格,进行数据的查看、编辑和管理。作为网页存储技术的重要组成部分,sessionStorage在提升用户体验和数据管理能力方面发挥了重要作用。在本篇《浏览…