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

2024-09-08 10:20

本文主要是介绍Cmake之3.0版本重要特性及用法实例(十三),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

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

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

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

欢迎关注Android系统攻城狮

🍉🍉🍉文章目录🍉🍉🍉

    • 🌻1.前言
    • 🌻2.Cmake之3.0介绍
    • 🌻3.代码实例
      • 🐓3.1. 改进的目标属性管理
      • 🐓3.2. 改进的 CMake Presets 支持
      • 🐓3.3. 支持生成器表达式
      • 🐓3.4. 改进的 Find 模块
      • 🐓3.5. 引入 CMake 3.0 生成器
      • 🐓3.6. 引入 `file` 命令的新功能
      • 🐓3.7. 支持静态库和动态库的选择

🌻1.前言

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

🌻2.Cmake之3.0介绍

CMake 3.0 版本发布于 2015 年,是 CMake 系列中的一次重大更新,引入了众多新特性和改进。这一版本不仅扩展了 CMake 的功能,还改进了用户体验和性能。以下是 CMake 3.0 版本的重要特性:

1. 现代 CMake 特性
CMake 3.0 强调了现代 CMake 的使用方式,鼓励开发者使用更简洁和强大的 CMake 语法。这包括使用 target_* 命令(如 target_include_directories, target_link_libraries 等)来管理项目的构建设置,而不是使用全局变量。这样的改进提高了构建脚本的可维护性和可读性。

2. 支持 C++11 标准
CMake 3.0 增强了对 C++11 标准的支持,使得开发者可以在 CMake 项目中更轻松地使用 C++11 特性。这包括支持 C++11 编译选项和标准库,使得开发者能够利用 C++11 的新特性进行开发,并确保编译器和构建工具链与 C++11 标准兼容。

3. 引入目标属性管理
CMake 3.0 引入了 target_properties 机制,使得开发者可以为每个目标(如库或可执行文件)设置特定的属性。这些属性包括编译选项、链接选项、包括路径等,从而更精细地控制每个目标的构建过程。这种方法比全局设置更具灵活性,避免了设置冲突和不一致的问题。

4. 增强的 Find 模块
CMake 3.0 对 Find 模块进行了显著改进,引入了更多的查找模块和改进了现有模块的功能。例如,增强了对第三方库的支持,使得查找和配置外部库变得更加简单和可靠。这些改进减少了手动配置依赖项的繁琐工作,提高了开发效率。

5. 支持生成 Xcode 7 和 Visual Studio 2015 项目
CMake 3.0 增强了对现代 IDE 的支持,包括 Xcode 7 和 Visual Studio 2015。这一版本确保了与最新版本的 IDE 的兼容性,使得开发者可以在最新的开发环境中顺利使用 CMake,确保了构建系统与最新工具链的兼容性。

6. 改进的 CPack 打包系统
CMake 3.0 对 CPack 打包系统进行了改进,增加了对新的打包格式和生成选项的支持。例如,新增了对生成 AppImage(用于 Linux 的独立应用包)和支持更多平台的安装包格式的支持。这使得发布和分发软件变得更加方便。

7. 支持跨编译器和工具链配置
CMake 3.0 提供了更强大的工具链和跨编译器配置功能。开发者可以通过工具链文件和 CMake 的配置选项灵活地设置编译器、链接器和其他工具链组件。这对于交叉编译和定制构建环境非常重要。

8. 改进的测试和报告功能
CMake 3.0 强化了测试框架,提供了更丰富的测试功能和报告选项。CTest 支持更详细的测试结果报告,包括测试覆盖率和性能数据。通过更好的集成和配置选项,CMake 3.0 帮助开发者实现了更有效的持续集成和自动化测试流程。

9. 性能优化和稳定性提升
CMake 3.0 在性能方面进行了优化,特别是在处理大型项目时表现更佳。改进了构建过程的效率,减少了配置时间和资源消耗,同时修复了多个已知问题,提高了整体稳定性。

🌻3.代码实例

🐓3.1. 改进的目标属性管理

  • 功能描述: CMake 3.0 引入了 TARGET_PROPERTY,使得对目标属性的管理更加灵活,可以直接在 CMake 脚本中查询和设置目标的属性。
  • 文件例子:
    # CMakeLists.txt
    project(TargetPropertiesManagement)add_executable(MyApp main.cpp)# 设置目标属性
    set_target_properties(MyApp PROPERTIES CXX_STANDARD 11)# 查询目标属性
    get_target_property(MYAPP_STANDARD MyApp CXX_STANDARD)
    message(STATUS "MyApp C++ Standard: ${MYAPP_STANDARD}")
    

🐓3.2. 改进的 CMake Presets 支持

  • 功能描述: CMake 3.0 强化了预设支持,允许用户定义和使用构建预设来简化和标准化构建过程。尽管预设功能在 3.0 中相对基础,但为后续版本的增强奠定了基础。
  • 文件例子:
    # CMakeLists.txt
    project(PresetsExample)# 定义预设选项
    set(CMAKE_BUILD_TYPE Debug CACHE STRING "Build type")
    

🐓3.3. 支持生成器表达式

  • 功能描述: CMake 3.0 引入了生成器表达式,允许在构建配置中使用更复杂的逻辑,这对于条件构建和配置非常有用。
  • 文件例子:
    # CMakeLists.txt
    project(GeneratorExpressionsExample)add_executable(MyApp main.cpp)# 使用生成器表达式设置目标链接库
    target_link_libraries(MyApp $<IF:$<CONFIG:Debug>,debug_lib,release_lib>)
    

🐓3.4. 改进的 Find 模块

  • 功能描述: CMake 3.0 对 FindXXX.cmake 模块进行了改进,增加了对更多第三方库的支持,并增强了库查找和配置的准确性。
  • 文件例子:
    # CMakeLists.txt
    project(FindModuleExample)find_package(OpenGL REQUIRED)
    add_executable(MyApp main.cpp)
    target_link_libraries(MyApp ${OPENGL_LIBRARIES})
    

🐓3.5. 引入 CMake 3.0 生成器

  • 功能描述: CMake 3.0 增强了生成器的支持,提供了更多的选项和灵活性,以适应不同的开发环境和工具链。
  • 文件例子:
    # 生成 Ninja 项目
    cmake -G "Ninja" .# 生成 Visual Studio 2015 项目
    cmake -G "Visual Studio 14 2015" .
    

🐓3.6. 引入 file 命令的新功能

  • 功能描述: CMake 3.0 增强了 file 命令,添加了更多的功能,例如读取和写入文件内容,进行文件操作等。
  • 文件例子:
    # CMakeLists.txt
    project(FileCommandExample)# 读取文件内容
    file(READ "input.txt" FILE_CONTENT)
    message(STATUS "File Content: ${FILE_CONTENT}")# 写入文件内容
    file(WRITE "output.txt" "This is some output text.")
    

🐓3.7. 支持静态库和动态库的选择

  • 功能描述: CMake 3.0 允许用户通过 CMake 配置文件指定要构建的库类型(静态库或动态库),增加了灵活性。
  • 文件例子:
    # CMakeLists.txt
    project(LibraryTypeExample)option(BUILD_SHARED_LIBS "Build using shared libraries" ON)add_library(MyLib src.cpp)add_executable(MyApp main.cpp)
    target_link_libraries(MyApp MyLib)
    

这篇关于Cmake之3.0版本重要特性及用法实例(十三)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1147844

相关文章

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

4B参数秒杀GPT-3.5:MiniCPM 3.0惊艳登场!

​ 面壁智能 在 AI 的世界里,总有那么几个时刻让人惊叹不已。面壁智能推出的 MiniCPM 3.0,这个仅有4B参数的"小钢炮",正在以惊人的实力挑战着 GPT-3.5 这个曾经的AI巨人。 MiniCPM 3.0 MiniCPM 3.0 MiniCPM 3.0 目前的主要功能有: 长上下文功能:原生支持 32k 上下文长度,性能完美。我们引入了

C++操作符重载实例(独立函数)

C++操作符重载实例,我们把坐标值CVector的加法进行重载,计算c3=c1+c2时,也就是计算x3=x1+x2,y3=y1+y2,今天我们以独立函数的方式重载操作符+(加号),以下是C++代码: c1802.cpp源代码: D:\YcjWork\CppTour>vim c1802.cpp #include <iostream>using namespace std;/*** 以独立函数

bytes.split的用法和注意事项

当然,我很乐意详细介绍 bytes.Split 的用法和注意事项。这个函数是 Go 标准库中 bytes 包的一个重要组成部分,用于分割字节切片。 基本用法 bytes.Split 的函数签名如下: func Split(s, sep []byte) [][]byte s 是要分割的字节切片sep 是用作分隔符的字节切片返回值是一个二维字节切片,包含分割后的结果 基本使用示例: pa

实例:如何统计当前主机的连接状态和连接数

统计当前主机的连接状态和连接数 在 Linux 中,可使用 ss 命令来查看主机的网络连接状态。以下是统计当前主机连接状态和连接主机数量的具体操作。 1. 统计当前主机的连接状态 使用 ss 命令结合 grep、cut、sort 和 uniq 命令来统计当前主机的 TCP 连接状态。 ss -nta | grep -v '^State' | cut -d " " -f 1 | sort |

Java Websocket实例【服务端与客户端实现全双工通讯】

Java Websocket实例【服务端与客户端实现全双工通讯】 现很多网站为了实现即时通讯,所用的技术都是轮询(polling)。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发 出HTTP request,然后由服务器返回最新的数据给客服端的浏览器。这种传统的HTTP request 的模式带来很明显的缺点 – 浏 览器需要不断的向服务器发出请求,然而HTTP

ActiveMQ—消息特性(延迟和定时消息投递)

ActiveMQ消息特性:延迟和定时消息投递(Delay and Schedule Message Delivery) 转自:http://blog.csdn.net/kimmking/article/details/8443872 有时候我们不希望消息马上被broker投递出去,而是想要消息60秒以后发给消费者,或者我们想让消息没隔一定时间投递一次,一共投递指定的次数。。。 类似

PostgreSQL核心功能特性与使用领域及场景分析

PostgreSQL有什么优点? 开源和免费 PostgreSQL是一个开源的数据库管理系统,可以免费使用和修改。这降低了企业的成本,并为开发者提供了一个活跃的社区和丰富的资源。 高度兼容 PostgreSQL支持多种操作系统(如Linux、Windows、macOS等)和编程语言(如C、C++、Java、Python、Ruby等),并提供了多种接口(如JDBC、ODBC、ADO.NET等

详解Tomcat 7的七大新特性和新增功能(1)

http://developer.51cto.com/art/201009/228537.htm http://tomcat.apache.org/tomcat-7.0-doc/index.html  Apache发布首个Tomcat 7版本已经发布了有一段时间了,Tomcat 7引入了许多新功能,并对现有功能进行了增强。很多文章列出了Tomcat 7的新功能,但大多数并没有详细解释它们