当前位置: 首页 > news >正文

QT之CMAKE教程

介绍

CMake 是一个跨平台的自动化构建系统,它使用配置文件(称为 CMakeLists.txt)来生成标准的构建文件,如 Unix 的 Makefile 或 Windows 的 Visual Studio 工程文件。CMake 能够支持多种编程语言,尤其是 C 和 C++,并且可以与多种编译器和构建工具配合使用。

以下是 CMake 的一些关键特点:

  1. 跨平台支持: CMake 支持在 Windows、Linux、macOS 等多种操作系统上构建项目。

  2. 生成多种构建系统: CMake 可以生成多种构建系统的文件,包括 Make、Ninja、Xcode 和 Visual Studio 解决方案等。

  3. 模块化: CMake 提供了模块化的设计,允许开发者重用代码和设置。

  4. 自定义构建类型: CMake 允许定义不同的构建类型,如 Debug、Release 或自定义构建类型。

  5. 依赖管理: CMake 可以处理复杂的依赖关系,并自动下载和集成第三方库。

  6. 测试驱动开发(TDD): CMake 支持 CTest,这是一个测试驱动开发工具,可以轻松地集成到构建过程中。

  7. 安装和打包: CMake 提供了安装目标和打包支持,可以生成安装程序和软件包。

  8. 变量和条件逻辑: CMake 脚本使用变量和条件逻辑来控制构建过程,使得构建配置非常灵活。

  9. 查找和配置外部库: CMake 可以查找和配置外部库,使得集成第三方库变得简单。

  10. 多配置工具: CMake 支持多配置工具,这意味着它可以生成支持多个配置(如 Debug 和 Release)的构建系统。

  11. IDE 集成: CMake 可以生成 IDE 项目文件,如 Visual Studio 或 Xcode 项目,使得在这些环境中工作变得容易。

CMake 的基本工作流程包括:

  • 编写 CMakeLists.txt 文件,定义项目的构建规则和配置。
  • 运行 cmake 命令,指定源代码目录和构建目录,生成构建系统。
  • 使用生成的构建系统(如 Make 或 IDE)来编译和构建项目。

CMake 是许多开源项目和商业软件的首选构建系统,因为它的灵活性和强大的功能使得它能够适应各种复杂的构建需求。

常用的命令

指定最低版本:cmake_minium_required

指定使用的cmake最低版本

定义工程名称:protect

定义工程名称

 生成可执行程序:add_executable

定义工程会生成一个可执行程序,生成的程序,和项目名没有关系。

 

执行cmake生成形式

执行版本为 Debug还是Release,有时候构建报错::-1: error: No "Debug" CMake configuration found. Available configuration: "".
Make sure that CMAKE_BUILD_TYPE variable matches the "Build type" field. 就需要添加这个参数

执行cmake

注意 

 在Windows下使用cmake ..  会生成vs的项目架构。不会生成MakeFile文件,如果windows下想要生成MakeFile需要输入命令  cmake ../ -G "Unix Makefiles"。来生成,最后执行make命令进行项目的编译。

私人定制

定义变量:set

 指定使用的C++标准:CMAKE_CXX_STANDARD

指定输出路径:EXECUTABLE_OUTPUT_PATH

如果指定的路径不存在,那么cmake会自动创建多层级的目录。

 搜索文件

方式一:aux_source_directory

PROJECT_SOURCE_DIR:搜索cmake 执行后后面指定路径的当前源文件路径下的文件.c .cpp ,添加到SRC_LISTS中
 

 方式二:file

CMAKE_CURRENT_SOURCE_DIR: CMAKE文件所对应的路径  经过本人亲测:file只搜索cpp文件,也是可以编译通过的。

包含头文件路径:include_directories

        

 通过CMAKE制作库文件

 静态库就是STATIC,动态库就是SHARED。

 指定动态库的输出路径

链接静态库 :link_libraries

链接动态库:target_link_libraries

 

日志

 宏定义:add_definitions

http://www.lryc.cn/news/525296.html

相关文章:

  • 网络安全 | 0day漏洞介绍
  • 关于WPF中ComboBox文本查询功能
  • 07_游戏加载窗口
  • awk命令进阶
  • 解锁Java中的国密算法:安全保障的密钥
  • 基于迁移学习的ResNet50模型实现石榴病害数据集多分类图片预测
  • 在现有 Docker Desktop 环境下安装与配置独立 Kubernetes环境(Mac)
  • Linux探秘坊-------3.开发工具详解(1)
  • Spring Boot整合Thymeleaf、JDBC Template与MyBatis配置详解
  • 白玉微瑕:闲谈 SwiftUI 过渡(Transition)动画的“口是心非”(下)
  • 论文:深度可分离神经网络存内计算处理芯片
  • hdrnet,Deep Bilateral Learning for Real-Time Image Enhancement解读
  • Android系统开发(十五):从 60Hz 到 120Hz,多刷新率进化简史
  • js判断一个数组对象中是否有相同的值
  • 基于深度学习的视觉检测小项目(十五) 用户的登录界面
  • redis-排查命中率降低问题
  • ui文件转py程序的工具
  • Alluxio 联手 Solidigm 推出针对 AI 工作负载的高级缓存解决方案
  • Oracle 数据库常见字段类型大全及详细解析
  • U3D的.Net学习
  • Tomcat下载配置
  • adb常用指令(完整版)
  • 大数据学习(36)- Hive和YARN
  • C# ASP.NET MVC项目内使用ApiController
  • Kafka 入门与应用实战:吞吐量优化与与 RabbitMQ、RocketMQ 的对比
  • “推理”(Inference)在深度学习和机器学习的语境
  • 字节腾讯阿里大厂面经汇总:Java集合(容器)大厂面试题及参考答案
  • 数据结构(初阶)(一)----算法复杂度
  • 构建高效稳定的网络环境
  • 使用Edge打开visio文件