Cmake和makefile

2023-11-05

什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。特别在Unix下的软件编译,你就不能不自己写makefile了,会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。
因为,makefile关系到了整个工程的编译规则。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。
makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。
你或许听过好几种 Make 工具,例如 GNU Make ,QT 的 qmake ,微软的 MS nmake,BSD Make(pmake),Makepp,等等。这些 Make 工具遵循着不同的规范和标准,所执行的 Makefile 格式也千差万别。这样就带来了一个严峻的问题:如果软件想跨平台,必须要保证能够在不同平台编译。而如果使用上面的 Make 工具,就得为每一种标准写一次 Makefile ,这将是一件让人抓狂的工作。
CMake就是针对上面问题所设计的工具:它首先允许开发者编写一种平台无关的 CMakeList.txt 文件来定制整个编译流程,然后再根据目标用户的平台进一步生成所需的本地化 Makefile 和工程文件,如 Unix 的 Makefile 或 Windows 的 Visual Studio 工程。从而做到“Write once, run everywhere”。

makefile通常依赖于你当前的编译平台,而且编写makefile的工作量比较大,解决依赖关系时也容易出错。因此,对于大多数项目,应当考虑使用更自动化一些的 cmake或者autotools来生成makefile,而不是上来就动手编写。
cmake跨平台,并可生成 native 编译配置文件,在 Linux/Unix 平台,生成 makefile,在 苹果平台,可以生成 xcode,在 Windows 平台,可以生成 MSVC 的工程文件。
makefile讲解链接。之后make就可以生成a.exe文件了

cmake -G "MinGW Makefiles" .生成MinGW Makefiles,而不是生成 MSVC 的工程文件。使用MinGW编译器

make后,可以看出先生成obj中间文件,后Link生成可执行文件。.\Demo 2 3运行

下面是使用微软的编译器

cmake入门实战

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Cmake和makefile 的相关文章

  • What do software developers age 30 and over know now that they wish they had known in their 20s?

    Here are a few thoughts I 39 d also recommend a thorough read of Joe Wezorek 39 s answer to this question Life is long I
  • Failed to download repository information Software Updater 解决

    今天在更新系统软件时打开Software Updater 遇到了Failed to download repository information 的错误 解决办法 在terminal 中输入 sudo apt span class tok
  • LightPC: Hardware and Software Co-Design for Energy-Efficient Full System Persistence(论文阅读翻译)

    xff08 注 xff1a 课程作业要求 xff0c 机翻自己看的 xff09 Abstract 我们提出了LightPC xff0c 一种轻量级的持久性中心平台 xff0c 以使系统对电源故障具有鲁棒性 LightPC由硬件和软件子系统组
  • SDK 就是 Software Development Kit 的缩写,中文意思就是“软件开发工具包“

    SDK 就是 Software Development Kit 的缩写 中文意思就是 软件开发工具包 让我想起当初OZO也有SDK
  • FBOSS: Building Switch Software at Scale

    BOSS 大规模环境下交换机软件构建 本文为SIGCOMM 2018 论文 xff0c 由Facebook提供 本文翻译了论文的关键内容 摘要 xff1a 在网络设备 xff08 例如交换机和路由器 xff09 上运行的传统软件 xff0c
  • windows software development kit是什么_Windows神器,让你用出Mac的感觉

    前言 Windows 10 觉得非常不适应 xff0c 总感觉没有 Mac OS 简洁 xff0c 漂亮 xff0c 这不是桌面 壁纸 图标的问题 最后想明白了 xff0c 问题出在字体上 因为Mac OS 的字体渲染比 Windows 的
  • StarWind Software Image Converter:虚拟机镜像转换工具,可将 img 文件转换为 VMware虚拟机 Vmdk 文件

    然后添加官网下载解压好的 img文件 xff1a
  • NPM使用技巧

    NPM使用技巧 前言 技巧 全局模块位置 PowerShell报错 安装模块冲突 NPM介绍 NPM命令 使用方法 基本命令 模块命令 查看模块 运行命令 镜像管理 常用模块 rimraf yarn 前言 本文包含NodeJS中NPM包管理
  • SigmaPlot科学绘图工具:ROC曲线分析及AUC组间差异的显著性分析

    目的 初步使用SigmaPlot科学绘图工具 进行ROC曲线绘制并分析检验变量AUC组间差异性是否显著 软件下载及安装 SigmaPlot下载安装按照这个教程即可 https www hhkxxw com 24799 html 快速通道 S
  • Win10聚焦锁屏壁纸保存

    前言 Win10聚焦锁屏每天都会推荐新的壁纸 其中有些质量超高的优秀壁纸 用户自然想下载保存下来 下文介绍如何保存 若用户仅想保存当天的聚焦锁屏壁纸 则推荐方法1 若用户想保存以前的聚焦锁屏壁纸 则推荐方法2 方法1 从微软商店下载软件 注
  • Wireshark 使用技巧

    一 数据包过滤 过滤需要的IP地址 ip addr 在数据包过滤的基础上过滤协议ip addr xxx xxx xxx xxx and tcp 过滤端口ip addr xxx xxx xxx xxx and http and tcp por
  • 开源OCR引擎Tesseract-OCR

    Overview Tesseract的OCR引擎最先由HP实验室于1985年开始研发 至1995年时已经成为OCR业内最准确的三款识别引擎之一 然而 HP不久便决定放弃OCR业务 Tesseract也从此尘封 数年以后 HP意识到 与其将
  • Cmake和makefile

    什么是makefile 或许很多Winodws的程序员都不知道这个东西 因为那些Windows的IDE都为你做了这个工作 但我觉得要作一个好的和professional的程序员 makefile还是要懂 这就好像现在有这么多的HTML的编辑
  • OneDrive同步角标消失 - 解决方案

    问题 在电脑端使用OneDrive时 文件管理器OneDrive文件夹内的文件会在左下角显示同步状态 如下图 若没有显示同步角标 则此功能出现异常 下文介绍如何显示同步角标 值得一提的是 同步角标只起到显示作用 没有同步角标并不影响OneD
  • Linux操作系统下取得UUID的方法

    Linux操作系统下取得UUID的方法 2008 12 2 13 40 查看数 1162 Linux下面 有专门生成UUID的命令 uuidgen r t 即可以生成一个32位的字符串 这个是在命令行得到 在 usr include lib
  • SumatraPDF

    SumatraPDF 是Windows平台上一款免费阅读器 它支持打开 PDF ePub MOBI XPS DjVu CHM CBZ 和 CBR 格式 Sumatra PDF 很小并且启动迅速 支持多国语言 含中文 支持绿色便携版 安装版可
  • idea必备开发插件.

    1 lombok 支持lombok的各种注解 从此不用写getter setter这些 可以把注解还原为原本的java代码 非常方便 https plugins jetbrains com plugin 6317 lombok plugin
  • Edge官方鼠标手势

    前言 日期 2023年8月 Edge浏览器目前已自带官方的鼠标手势功能 若要使用首先将浏览器更新至最新版 下文介绍使用方法 官方鼠标手势 前提 更新Edge至最新版 并关闭其它鼠标手势扩展 开启鼠标手势 打开Edge浏览器的设置 找到外观
  • VS Code插件汇总

    插件 Basic Chinese Simplified Language Pack C C C C CMake Tools C C Extension Pack Web Open in browser Microsoft Edge Tool
  • ubuntu中使用Deb安装VS Code

    01 进入VS Code 下载安装包 网址 https code visualstudio com 02 将Windows系统中下载的deb安装包复制到虚拟机ubuntu中 03 进入虚拟机ubuntu中 通过cd命令进入到deb安装包目录

随机推荐

  • [Elasticsearch]源码解析:ES如何避免脚本中的危险操作

    一 简述 在我们使用ES进行脚本操作的时候 可以在脚本中使用painless等脚本语言 但我们是否有想过在脚本中进行危险操作类似System exit 0 的时候 ES是怎么规避这种风险的 不废话 上例子 POST trick search
  • (二十八)admin-boot项目之基于MDC的全局日志追踪

    二十八 基于MDC的全局日志追踪 项目地址 https gitee com springzb admin boot 如果觉得不错 给个 star 简介 这是一个基础的企业级基础后端脚手架项目 主要由springboot为基础搭建 后期整合一
  • 服务器怎样创建多台虚拟主机,服务器是如何实现多台虚拟主机

    服务器是如何实现多台虚拟主机 内容精选 换一换 弹性云服务器 Elastic Cloud Server 是一种可随时自动获取 计算能力可弹性伸缩的云服务器 可帮助您打造可靠 安全 灵活 高效的应用环境 确保服务持久稳定运行 提升运维效率 通
  • 调用VSPD的DLL进行二次开发异常解决的解决方法。

    最近在学习 设想做一个实现虚拟串口的C 程序 因为我不会写驱动 于是参考老哥的方法 调用VSPD的DLL开放接口进行实现 从VSPD虚拟COM口安装包解出独立的驱动安装包 虚拟串口开发和EXE程序反解压 http blog csdn net
  • 开机f8修复电脑步骤_只要按一个键,可以修复很多电脑小故障

    经常遇到 客户的电脑开机进不了系统 卡在修复界面 半天没反应 有的开机在检测界面 一直没反应 还有的因为运行的程序太多 开个机要耐着性子 等10多分钟 才能使用电脑 还一直很慢 很卡 要重装系统 又担心很多程序找不到安装程序 只能一直忍 很
  • Python无法打开excel文档解决办法

    问题 无法打开excel文档 解决办法 安装xlrd模块 在cmd命令行下执行 pip install pyexcel xls 如果以上方法无法解决 继续报以下问题 pandas无法打开 xlsx文件 xlrd biffh XLRDErro
  • QQ js_sdk第三方授权登录 自定义登录按钮

    STEP 1 QQ放置页面添加 img src qq png function qqLogin QC Login showPopup 替换APPID和回调页面即可 STEP 2
  • 获取百度翻译内容

    import requests url https fanyi baidu com sug s input 请输入你要翻译的英文单词 dic kw s resp requests post url data dic print resp j
  • 【Unity】常见的角色移动旋转

    在Unity 3D游戏引擎中 可以使用不同的方式对物体进行旋转 以下是几种常见的旋转方式 欧拉角 Euler Angles 欧拉角是一种常用的旋转表示方法 通过绕物体的 X Y 和 Z 轴的旋转角度来描述物体的旋转 在Unity中 可以通过
  • mysql 报错 your password has expired.To log in you must change itusing a client that supports expired

    学习java少不了和数据库打交道 在使用 Navicat 连接 mysql 的时候 出现了这个错误 这表示你设置的密码过期了 这里我们重新设置一下密码即可 1 打开 cmd 窗口 进入 mysql 的 bin 目录下 2 连接mysql m
  • C++游戏制作入门小游戏(迷宫)此篇只适用于新手

    最近有些无聊 于是翻了翻以前的代码 找到了之前第一次编的游戏 想起以前学完C 无从下手的感觉 就把它加了点备注 当做一篇入门教程发出来了 这是用DevC 写的 参考自一位大佬写的贪吃蛇 下面上图 PS 开始界面我现在看来是相当的丑 好吧菜单
  • linux开机自动挂载硬盘命令,linux添加新磁盘分区开机自动挂载(随记)

    1 首先先添加一块新的磁盘 ps 虚拟机测试 2 添加好一个磁盘后 10GB 执行reboot命令 重启系统生效 reboot 3 执行fidsk l 则出现了新添加的磁盘 为sdb 4 执行分区命令 fdisk dev sdb n 为新建
  • 软件测试--bug的等级划分

    bug的严重级别 致命的软件缺陷 Blocker 一级bug 1 造成系统或应用程序崩溃 死机 数据丢失 系统挂起 如代码错误 死循环 数据库发生死锁 一直锁在一个地方不解锁 2 与数据库连接错误或数据通讯错误 未考虑异常操作 功能错误等
  • Markdown 技能树(4):链接

    Markdown 技能树 4 链接 Markdown 支持两种形式的链接语法 行内和参考两种形式 不管是哪一种 链接的文字都是用 方括号 来标记 行内形式链接 行内形式的链接是在方块括号后面接括号并插入网址链接即可 如果你还想要加上链接的
  • Visual Studio 2005集成开发环境图解

    摘要 本文探讨其中的一些功能 并且阐述开发人员如何使用它们以更快 更准确地编写代码 正文 Microsoft Visual Studio 2005 包含许多对开发环境新的增强 创新和提高 其目的在于使 Visual Basic NET 开发
  • 基于R语言3组以上倾向评分逆概率加权(IPTW)

    基于 PS 倾向评分 的IPTW 法首先由 osenbaum作为一种以模型为基础的直接标准化法提出 属于边际结构模型 简单来说 就是把许多协变量和混杂因素打包成一个概率并进行加权 这样的话 我只用计算它的权重就可以了 方便了许多 那么 如何
  • ARTS 挑战打卡的第9天 --- 如何知道一个数是否为2的若干次幂(Algorithm)

    前言 1 今天看到一个有意思的问题 如何判断一个数字是否为2的若干次幂 这个问题并不难 但是对于我们的C语言功底还是有一点点的考验的 2 希望各位可以先自行思考 实在想不出来再看后面的讲解 提示 C语言的位运算是一个好东西 解析 2的若干次
  • OpenCV(C++)----Mat.type()

    原文地址 https blog csdn net jeffdeen article details 52401526 opencv中Mat存在各种类型 其中mat有一个type 的函数可以返回该Mat的类型 类型表示了矩阵中元素的类型以及矩
  • C++自学记录(变量)

    目录 变量 变量定义 初始值 赋值 初始化 列表初始化 默认初始化 变量声明和定义的关系 关键概念 静态类型 标识符 变量命名规范 名字的作用域 嵌套的作用域 变量 变量提供一个具名的 可供程序操作的储存空间 变量中的数据类型决定着变量所占
  • Cmake和makefile

    什么是makefile 或许很多Winodws的程序员都不知道这个东西 因为那些Windows的IDE都为你做了这个工作 但我觉得要作一个好的和professional的程序员 makefile还是要懂 这就好像现在有这么多的HTML的编辑