玩转Makefile

2023-11-19

1. 前言

Makefile是一个神奇的东西,有了它只需一个make命令就可以让源文件按你的规则编译成你所想要的程序。非常简单,方便。对于Keil,VS等IDE,一般只需点一下绿色的三角按钮,就可以完成编译。但具体内部是怎么实现编译的?改动文件后如何只编译改动的文件?学完makefile就可以掌握这些东西,从而对系统编程会有更深层次的理解。

Makefile的内容也非常之多,但常用的知识也不是很多。所谓时间花在刀刃上,与其过分追求枝叶,不如先把握好主枝干。当主枝干学得滚瓜烂熟之后再去学那些比较偏的知识也不迟,或者等用到的时候再度娘一下也无妨。

 

2. 书籍推荐

1. 陈皓的《跟我一起写makefile》

2. gnu make manual

3. managing projects with gnu make, 3rd

这里尤为推荐陈皓的《跟我一起写makefile》,写的很通俗易懂。但就是内容多了一些,看完需要花一定的时间。

 

3. 系列文章简介

玩转Makefile | 基础入门

--> 本文主要介绍Makefile的基础知识,可以先掌握这些基础知识再去延伸其它内容。

玩转Makefile | 四步教你从零开始写Makefile

--> 目前有现成工具可以自动写Makefile,但对于一些中小项目来说自动导出的Makefile也非常长,不易于理解与维护。本文从零开始教你一步步编写Makefile,从此妈妈再也不用担心我不会写Makefile了。

玩转Makefile | 企业项目Makefile实例

--> 本文介绍了企业里一个Makefile的常见形式,掌握了这个案例,基本可以达到企业用人标准了。

玩转Makefile | 编译有共用文件的多个程序

--> 本文介绍了Makefile的另一个场景——具有共用文件的多个程序,这种场景在企业项目里也相当常见,需掌握。

玩转Makefile | 一次编译多个目标

--> 本文介绍的这个场景不太适用企业项目,但在自己平时练习的时候可以用得上。

 

---------------

码字不易,点个赞再走呗~

我是良许,世界500强外企 Linux 开发工程师,专业生产 Linux 干货。欢迎关注我的公众号「良许Linux」,回复「1024」获取最新最全的技术资料,回复「入群」进入高手如云技术交流群;提供永久免费 CSDN 资料下载服务。

 

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

玩转Makefile 的相关文章

  • 如何使用 sed 仅删除双空行?

    我找到了这个问题和答案 https stackoverflow com questions 4651591 howto use sed to remove only triple empty lines关于如何删除三重空行 但是 我只需要对
  • arm-linux-gnueabi 编译器选项

    我在用 ARM Linux gnueabi gcc在 Linux 中为 ARM 处理器编译 C 程序 但是 我不确定它编译的默认 ARM 模式是什么 例如 对于 C 代码 test c unsigned int main return 0x
  • SONAR - 使用 Cobertura 测量代码覆盖率

    我正在使用声纳来测量代码质量 我不知道的一件事是使用 Cobertura 测量代码覆盖率的步骤 我按照以下步骤操作http cobertura sourceforge net anttaskreference html http cober
  • 在 Linux 上的 Python 中使用受密码保护的 Excel 工作表

    问题很简单 我每周都会收到一堆受密码保护的 Excel 文件 我必须解析它们并使用 Python 将某些部分写入新文件 我得到了文件的密码 当在 Windows 上完成此操作时 处理起来很简单 我只需导入 win32com 并使用 clie
  • 在Linux上编译C# + WPF以便在Windows上运行

    我有一个 C 应用程序 其中某些部分是使用 WPF 编写的 Mono 不支持 可以在 Linux 上编译这个应用程序吗 最终 该应用程序将在 Windows 上运行 但它是更大框架的一部分 并且我们的整个构建过程在 Linux 上运行 因此
  • Locale.getDefault() 始终返回 en

    unix 机器上的服务器始终使用 en 作为默认区域设置 以下是区域设置输出 LANG en US LC CTYPE C LC NUMERIC C LC TIME C LC COLLATE C LC MONETARY C LC MESSAG
  • Unix 命令列出包含字符串但*不*包含另一个字符串的文件

    如何递归查看包含一个字符串且不包含另一个字符串的文件列表 另外 我的意思是评估文件的文本 而不是文件名 结论 根据评论 我最终使用了 find name html exec grep lR base maps xargs grep L ba
  • 无法加载 JavaHL 库。- linux/eclipse

    在尝试安装 Subversion 插件时 当 Eclipse 启动时出现此错误 Failed to load JavaHL Library These are the errors that were encountered no libs
  • 跟踪 Linux 程序中活跃使用的内存

    我想跟踪各种程序在特定状态下接触了多少内存 例如 假设我有一个图形程序 最小化时 它可能会使用更少的内存 因为它不会重新绘制窗口 这需要读取图像和字体并执行大量库函数 这些对象仍然可以在内存中访问 但实际上并没有被使用 类似的工具top它们
  • 如何检测并找出程序是否陷入死锁?

    这是一道面试题 如何检测并确定程序是否陷入死锁 是否有一些工具可用于在 Linux Unix 系统上执行此操作 我的想法 如果程序没有任何进展并且其状态为运行 则为死锁 但是 其他原因也可能导致此问题 开源工具有valgrind halgr
  • nginx 上的多个网站和可用网站

    通过 nginx 的基本安装 您的sites available文件夹只有一个文件 default 怎么样sites available文件夹的工作原理以及如何使用它来托管多个 单独的 网站 只是为了添加另一种方法 您可以为您托管的每个虚拟
  • 如何在bash中使用jq从变量中包含的json中提取值

    我正在编写一个 bash 脚本 其中存储了一个 json 值 现在我想使用 Jq 提取该 json 中的值 使用的代码是 json val code lyz1To6ZTWClDHSiaeXyxg redirect to http examp
  • gdb查找行号的内存地址

    假设我已将 gdb 附加到一个进程 并且在其内存布局中有一个文件和行号 我想要其内存地址 如何获取文件x中第n行的内存地址 这是在 Linux x86 上 gdb info line test c 56 Line 56 of test c
  • Linux中的定时器类

    我需要一个计时器来以相对较低的分辨率执行回调 在 Linux 中实现此类 C 计时器类的最佳方法是什么 有我可以使用的库吗 如果您在框架 Glib Qt Wx 内编写 那么您已经拥有一个具有定时回调功能的事件循环 我认为情况并非如此 如果您
  • 在哪里可以找到并安装 pygame 的依赖项?

    我对 Linux 比较陌生 正在尝试安装 python 的 pygame 开发环境 当我运行 setup py 时 它说我需要安装以下依赖项 我找到并安装了其中之一 SDL 然而 其他人则更加难以捉摸 Hunting dependencie
  • 如何有效截断文件头?

    大家都知道truncate file size 函数 通过截断文件尾部将文件大小更改为给定大小 但是如何做同样的事情 只截断文件的尾部和头部呢 通常 您必须重写整个文件 最简单的方法是跳过前几个字节 将其他所有内容复制到临时文件中 并在完成
  • arm64和armhf有什么区别?

    Raspberry Pi Type 3 具有 64 位 CPU 但其架构不是arm64 but armhf 有什么区别arm64 and armhf armhf代表 arm hard float 是给定的名称Debian 端口 https
  • 无法使用 wget 在 CentOS 机器上安装 oracle jdk

    我想在CentOS上安装oracle java jdk 8 我无法安装 java jdk 因为当我尝试使用命令安装 java jdk 时 root ADARSH PROD1 wget no cookies no check certific
  • 如何在 Linux shell 中将十六进制转换为 ASCII 字符?

    假设我有一个字符串5a 这是 ASCII 字母的十六进制表示Z 我需要找到一个 Linux shell 命令 它将接受一个十六进制字符串并输出该十六进制字符串代表的 ASCII 字符 所以如果我这样做 echo 5a command im
  • 两种情况或 if 哪个更快? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我必须制作一个 非常 轻的脚本 它将接受用户的选项并调用脚本中的函数来执行一些任务 现在我可以使用 IF 和 CASE 选项 但我想知道两

随机推荐

  • 配置本地docker与镜像并上传到服务器使用

    1 在本地创建基础容器 官网 1 卸载旧版本 如果有 sudo apt get remove docker docker engine docker io containerd runc 2 设置Docker的存储库并从中安装 更新包索引并
  • SQL优化技巧

    本文以Mysql数据库为例 总结数据库优化方法 一 数据库优化四个层面 Mysql数据库优化 可以从以下四个层面优化 硬件 系统配置 数据库表结构 sql语句及索引 优化效果 SQL语句及索引 gt 数据库表结构 gt 系统配置 gt 硬件
  • CentOS8 同步时间chrony ntpdate已无法使用

    CentOS8 同步时间chrony ntpdate已无法使用 在CentOS8中 已使用chrony替代ntp 首先安装chrony 使用dnf安装 dnf install y chrony 也可以用yum安装 yum install y
  • Linux权限、用户组、用户

    前提 这里以Centos7为例 首先进入 目录 并输入 ls l cd ls l 分析 根据上图我们拿其中一条来说 drwxr xr x 14 root root 3440 Aug 14 07 31 dev 第一个字母 d 代表这个文件的含
  • 俄罗斯担忧开发者无法访问开源代码,为什么开源如此重要?

    俄乌冲突背景下 俄国媒体发文称 世界第一开源软件平台GitHub正在考虑限制俄罗斯软件开发者访问开源软件源代码储存库 此外 数据库巨头 Oracle 也宣布已经暂停了在俄罗斯的所有业务 这些消息迅速刷屏 原因之一便是现在的 IT 世界已离不
  • Win10环境下配置VScode远程开发ssh-remote(免密登录)

    问题背景 在开发或者做实验的过程中 我们经常会用到远程服务器或者Github的项目 而我服务器上的项目只能在Jupyter Notebook上编写 或许可以在其他IDE上写 但我不知道 而我们喜欢用的IDE比如Pycharm 轻量级的VSc
  • C语言之指针知识大总结

    文章目录 一 地址 二 指针与指针变量 三 指针的作用 四 初学指针时常见的错误 五 通过调用函数修改主调函数中的值 六 指针与一维数组 七 使用函数操作一维数组 八 指针变量所占字节数 九 静态数组的缺陷 十 malloc函数 十一 动态
  • ElasticSearch 6.3版本(ES)查询人名关键字不拆词查询

    ElasticSearch 6 3版本 ES 查询关键字不拆词查询 类似mysql 的 like 语句 mysql的sql语法类似如下 采用大量like和locate语法 进行模糊查询 导致查询一个需要8秒多 通过ES优化后 总的查询在1秒
  • postman中进行SHA1或MD5签名

    大部分接口为了防御重放攻击 往往使用SHA1或者MD5对请求进行签名 例如 我们有如下请求 Request URL http xx xx xx xx nonce 123 timestamp 123 Body xxx xxx signatur
  • ESP8266(果云科技的开发板源码)

    ESP8266 果云科技的开发板源码 TOC 最近调试果云科技的老板子ESP8266开发板 比较老了 调试串口输入很麻烦 因为API函数很麻烦 源码已上传 请下载 下面是代码 File uart c Copyright 2013 2016
  • jxls Excel表格导出( 模板导出多个sheet)

    使用模板来导出excel表格 1 使用jxls core jar包来实现 jxls core不支持POI4以上的版本 1 1 maven
  • 在微服务项目中,Spring Security 比 Shiro 强在哪?

    Spring Security 和Shiro的区别
  • LDAP协议

    1 LDAP是Lightweight Directory Access Protocol的缩写 顾名思义 它是指轻量级目录访问协议 这个主要是相对另一目录访问协议X 500而言的 LDAP略去了x 500中许多不太常用的功能 且以TCP I
  • 程序的链接

    程序的链接是一个非常实际的问题 他建立在很实际的问题之上 不从程序员的角度去思考问题 则是从软件的角度去思考如何复用错综复杂的代码 因为 这个问题的本质是我们没有给底层的硬件一个完整的可按顺序执行的程序 我们在前几章虽然讨论了指令流的问题
  • 【Node.js实战】一文带你开发博客项目之Koa2重构(实现session、开发路由、联调、日志)

    个人简介 个人主页 前端杂货铺 学习方向 主攻前端方向 也会涉及到服务端 个人状态 在校大学生一枚 已拿多个前端 offer 秋招 未来打算 为中国的工业软件事业效力n年 推荐学习 前端面试宝典 Vue2 Vue3 Vue2 Vue3项目实
  • QT--SQLite

    QT数据库实例 QT Sqlite操作 转载于 http mobile 51cto com symbian 273444 htm 585532 tsina 1 51851 7e393678b940a4d55500bf3feae3d2e9 S
  • 时序分解

    时序分解 MATLAB实现基于LMD局部均值分解的信号分解分量可视化 目录 时序分解 MATLAB实现基于LMD局部均值分解的信号分解分量可视化 效果一览 基本介绍 程序设计 参考资料 效果一览 基本介绍 LMD局部均值分解 直接替换Exc
  • 思维模型:建立高品质思维的30种模型

    第一章 如何快速而全面地做出决策 思维模型1 关注 重要 任务 忽略 紧急 任务 用于区分真正的优先事项和冒牌货 重要任务和紧急任务区分开 把活动和需求分类 整理出最重要的任务 并找出为了实现这些重要任务需要采取哪些最关键的流程 重要任务
  • 游戏开发unity插件CRI ADX2系列:插件下载及教程

    推荐一个比较好的声音插件 可以在较大压缩音乐资源的同时维持较好的音质 教程 https blog criware cn category tutorials https www bilibili com video av56190616 C
  • 玩转Makefile

    1 前言 Makefile是一个神奇的东西 有了它只需一个make命令就可以让源文件按你的规则编译成你所想要的程序 非常简单 方便 对于Keil VS等IDE 一般只需点一下绿色的三角按钮 就可以完成编译 但具体内部是怎么实现编译的 改动文