qmake、CMake、make和Makefile

为了跟踪C++工程的全部部分,要求有一种机制来精确地指定:
  1. 涉及的输入文件,如源代码文件.cpp,头文件.h
  2. 建立程序时所需的工具,如编译器: g++.exe,链接器ld.exe,构建工具make
  3. 中间目标文件和它们的依赖关系,如目标文件.o .obj,依赖关系文件.d
  4. 最终的可执行目标文件,如.exe

Makefile

Makefile是一种文本文件,通常用于定义和管理软件项目的构建过程。其和 shell 脚本类似,但其至少包含如下信息:

  1. 用于建立某种文件类型的规则,如为了从 cpp 文件得到 .o 文件,必须对 .cpp 文件执行 gcc-c 指令。
  2. 源文件列表和头文件列表,它们包含工程所需的全部源文件和头文件的名称。
  3. 目标文件,指定了必须建立哪些可执行文件(或者库)
  4. 依赖关系,列出了当某些文件发生改变时,哪些目标文件必须重新建立

make

make是一个用于自动化构建的命令行工具, 它会从 Makefile 中读取工程规范的细节,也会读取提供给编译器的指令,从而自动执行编译、链接等操作,从而构建整个项目。
make 命令会从当前的工作目录下加载名称为 Makefile 或 makefile  的文件 并执行指定的链编步骤(编译并链接)。 它只会重新编译那些发生了变化的文件,或者那些由 化而受到影响的文件,而不会盲目地重新编译每一个源文件。

qmake

Qt提供了 qmake 工具,它会根据一个工程文件产生 Makefile 文件,因此不需要手动编写Makefile文件。qmake使用 .pro 文件作为工程文件,并使用 .pri 文件作为包含项目的模块或部分配置的文件。
关于pro文件的解析请看: QT .pro工程文件模板详解

CMake

CMake 是一个跨平台的开源工具,用于自动生成用于构建项目的Makefile或其他构建系统的配置文件。 CMake 使用 CMakeLists.txt 作为工程文件,来描述项目的构建过程,包括指定源文件、依赖关系、编译选项等。

总结

CMake 和 qmake 只是生成 makefile 文件的两种不同的方式,而 make 才是真正通过 makefile 来构建项目的工具,如图:

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

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

相关文章

乡村振兴与农村基础设施建设:加大投入力度,提升建设水平,完善农村基础设施网络,打造宜居宜业的美丽乡村

一、引言 乡村振兴战略是我国在新时代推进农业农村现代化的重大战略部署,其核心目标是实现乡村的全面振兴,促进农业强、农村美、农民富。农村基础设施建设作为乡村振兴的基石,其建设水平直接关系到乡村经济的持续健康发展、乡村环境的改善以…

你还在手动加好友?试试这款神器,释放双手自动添加!

你还在手动添加微信好友吗?尤其是在忙碌的时候,手动加好友不仅费时又很容易出错。试试这个自动添加好友神器——个微管理系统,释放你的双手,轻松拓展好友列表! 1、多号同时登录在线 系统支持多个微信号同时登录在线&…

Dynamic Rumor Control in Social Networks using Temporal Graph Neural Networks

Abstract 在线平台上谣言和错误信息的普遍传播需要采取积极有效的方法来检测和减轻其影响。我们提出的方法利用社交网络交互的时间动态,并将其集成到时间图神经网络(TGNN)模型中,以进行谣言检测和控制。研究首先制定TGNN模型的数学…

CentOS上Zookeeper集群安装部署

简介 Zookeeper是一款分布式的集群化软件,可以在多台服务器上部署,并协同组成分布式集群一起工作。 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的…

ue引擎游戏开发笔记(38)——实现敌人接收攻击伤害,并作出反应

1.需求分析: 现在已经显示造成实际伤害,但敌人对实际伤害并未产生反馈,例如还击,或者死亡倒地等等,实现敌人对于受击的反馈。 2.操作实现: 1.思路:在动画蓝图中添加死亡动画,并通过…

uac驱动模块传参

static char*book_name "dissecting linux device drvier"; module_param(book_name,charp,S_IRUGO);static int book_num 4000; module_param(book_num,int,S_IRUGO);加载很多依赖驱动 insmod usb_f_uac1.ko book_name"linux world" book_num123456 …

战网国际服下载教程 暴雪战网客户端一键下载安装教程分享

战网国际服务平台,又名Battle.net环球版,是暴雪娱乐操作的跨国界游戏交流平台,它消除了地域的隔阂,向全球范围内的游戏爱好者提供服务。与仅服务于特定地区的版本不同,国际版赋予了玩家自由穿梭于暴雪众多标志性游戏的…

二叉树路径总和

题目1: 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。 叶子…

对比测评3款BI分析工具

前不久,一位准备入职阿里的学弟问我,他要做电商数据分析,电商有庞杂的标签、模型、数据和业务逻辑,菜鸟应该要具备什么样的分析能力啊? 我看了他的岗位职责,主要是负责经营决策支持、专题分析和数据看板搭…

FreeRTOS【5】线程阻塞

1.开发背景 基于上一篇指引,已经了解了线程的挂起和恢复,这个篇章主要测试线程阻塞的方法 2.开发需求 线程串行阻塞和周期阻塞 3.开发环境 window10 MDK STM32F429 FreeRTOS10.3.1 4.实现步骤 4.1 线程串行阻塞 其实在上一篇已经使用了线程阻塞&a…

项目管理—需求管理规程(软件研发过程标准,管理标准,标书技术编写,资质评审,安全管理体系,项目交付,实施运维,各类建设方案)

软件资料清单列表部分文档清单:工作安排任务书,可行性分析报告,立项申请审批表,产品需求规格说明书,需求调研计划,用户需求调查单,用户需求说明书,概要设计说明书,技术解…

基于卷积神经网络CNN,使用二维卷积Conv2D实现MNIST数字识别的四种方法

前言 系列专栏:机器学习:高级应用与实践【项目实战100】【2024】✨︎ 在本专栏中不仅包含一些适合初学者的最新机器学习项目,每个项目都处理一组不同的问题,包括监督和无监督学习、分类、回归和聚类,而且涉及创建深度学…