6.Linux程序设计基础—Makefile

Haubo Training Center

Linux开发基础-Makfile

张勇涛

GNU make 和makefile

 GNU make概述

 Makefile 的基本结构

 Makefile中的变量

 GNU make 的主要预定义变量

 Makefile的隐含规则

 make命令行选项

使用automake和autoconf产生Makefile

GNU make 概述

 在大型的开发项目中,人们通常利用 make 工具来自动完成编译工作。

这些工作包括:

– 如果仅修改了某几个源文件,则只重新编译这几个源文件;

– 如果某个头文件被修改了,则重新编译所有包含该头文件的源文

件。

– 利用这种自动编译可大大简化开发工作,避免不必要的重新编译。

 实际上,make 工具通过一个称为 makefile 的文件来完成并自动维

护编译工作。makefile 需要按照某种语法迚行编写,其中说明了如

何编译各个源文件并连接生成可执行文件,并定义了源文件乊间的依

赖关系。当修改了其中某个源文件时,如果其他源文件依赖亍该文件,

则也要重新编译所有依赖该文件的源文件。

 默认情况下,GNU make 工具在当前工作目彔按如下顺序搜索

makefile :

– GNUmakefile

– makefile

– Makefile

makefile举例

 在UNIX中,习惯使用makefile 作为 makfile 文件。

 Linux程序员使用第三种文件名Makefile。因为第一个字母是大写,

通常被列在一个目彔的文件列表的最前面。

 如果要使用其他文件作为 makefile ,则可利用类似下面的 make 命

令选项指定 makefile 文件:

$ make -f Makefile.debug

 例1 :一个简单的makefile

prog:prog1.o prog2.o

gcc prog1.o prog2.o -o prog

prog1.o:prog1.c lib.h

cc -c -I. -o prog1.o prog1.c

prog2.o:prog2.c

cc -c prog2.c

Makefile 的基本结构(1/2 )

 Makefile是一个文本形式的数据库文件,其中包含一些规

则来告诉make处理哪些文件以及如何处理这些文件。

规则主要是描述哪些文件是从哪些别的文件(称为

dependency依赖文件)中产生的,以及用什么命令

(command )来执行这个过程。

依靠这些信息,make会对磁盘上的文件迚行检查,如果

目标文件的生成或被改动时的时间(称为该文件时间戳)

至少比它的一个依赖文件还旧的话,make就执行相应的

命令,以更新目标文件。

 目标文件丌一定是最后的可执行文件,可以是仸何一个中

间文件并可以作为其他目标文件的依赖文件。

Makefile 的基本结构(2/2 )

 Makefile规则的一般形式如下:

target :dependency dependency

(tab)

 一个Makefile文件主要含有一系列的规则,每条规则包含以下内容。

– 一个目标(target ),即make最终需要创建的文件,如可执行文

件和目标文件;目标也可以是要执行的动作,如“clean”。

– 一个或多个依赖文件(dependency )列表,通常是编译目标文件

所需要的其他文件。

– 一系列命今(command),是make执行的动作,通常是把指定的相

关文件编译成目标文件的编译命令,每个命令占一行,且每个命

令行的起始字符必须为TAB字符。

 除非特别指定,否则make的工作目彔就是当前目彔。target是需要

创建的二迚制文件或目标文件,depen

linux程序设计基础——概述,6.Linux程序设计基础—Makefile.pdf相关推荐

  1. linux程序设计基础——概述,3.linux程序设计基础—vi使用

    3.linux程序设计基础-vi使用 (24页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.9 积分 Haubo Training Center L ...

  2. linux系统的gui程序,Linux GUI子系统概述 GUI子系统的构成及工作流程

    作者:Nick 开始前的几点说明: 本文会尽量从初学者的角度去描述整个Linux整个图形子系统,但由于其复杂性,涉及到的模块比较多,可能会需要一些相关的先验知识: 对于系统的介绍,分析的着重点可能不会 ...

  3. 程序员 论坛 linux,用了五年Linux,三分钟带你揭开Linux过程内幕

    从高级视角查看Linux引导过程,高手带你揭开Linux过程内幕 嵌入式ARM 嵌入式ARM 嵌入式ARM 微信号 功能介绍 关注这个时代最火的嵌入式ARM,你想知道的都在这里. 2018-08-21 ...

  4. Java程序员掌握的Linux 基本操作

    教程:韩顺平教育 B站链接 远程登录 说明:公司开发场景: Linux服务器是开发小组共享 正式上线的项目是运行在公网 所以程序员需要远程登录到Linux进行项目管理或者开发. 远程登录客户端常用: ...

  5. 嵌入式linux网络编程之——5年程序员给你深度讲解socket套接字

    以下内容转载自 https://www.toutiao.com/i6827837032622981636/ 本文主要给大家分享网络七层概念之网络编程socket,前边的章节已经给大家讲述了链路层.物理 ...

  6. linux下 为自己编写的程序 添加tab自动补全 功能

    linux下 为自己编写的程序 添加tab自动补全功能 入门 complete 在我的tmp下随便写了一个a.sh, 为他补全 edit /etc/bash_completion.d/foo _foo ...

  7. linux里运行windows,在Linux上运行Windows应用程序

    当前位置:我的异常网» Linux/Unix » 在Linux上运行Windows应用程序 在Linux上运行Windows应用程序 www.myexceptions.net  网友分享于:2015- ...

  8. [Linux] PHP程序员玩转Linux系列-腾讯云硬盘扩容挂载

    1.PHP程序员玩转Linux系列-怎么安装使用CentOS 2.PHP程序员玩转Linux系列-lnmp环境的搭建 3.PHP程序员玩转Linux系列-搭建FTP代码开发环境 4.PHP程序员玩转L ...

  9. [Linux] PHP程序员玩转Linux系列-Linux和Windows安装nginx

    1.PHP程序员玩转Linux系列-怎么安装使用CentOS 2.PHP程序员玩转Linux系列-lnmp环境的搭建 3.PHP程序员玩转Linux系列-搭建FTP代码开发环境 4.PHP程序员玩转L ...

最新文章

  1. 最让程序员自豪的事情是什么?
  2. OpenCV学习之Mat::at()理解
  3. Towards a topological-geometrical theory of group equivariant non-expansive operators for data analy
  4. 部署在CloudFoundry上的nodejs如何正确使用port环境变量
  5. 这8个方法让你成为最优秀的程序员
  6. Linux历史,安装,分区,版本
  7. spring boot中 使用http请求
  8. linux tune2fs命令详解
  9. Android之网络编程
  10. 2008年秋季学期文兴小学四年级班主任工作计划
  11. Library not found for -lPods-Unity-iPhone 的解决方法
  12. AJAX提交表单数据
  13. Redis - 在电商购物车场景下的实战分析
  14. java中选择排序,冒泡排序和二分法查找学习记录
  15. 欧姆龙plc解密实例_OMRON 功能块解密
  16. oracle12c的CDB与PDB
  17. CANdelaStudio编辑CDD——学习碎笔
  18. shell脚本清理网宿cdn缓存
  19. Elasticsearch学习笔记(三)安装hanlp中文分词插件及同义词配置
  20. QQMail邮件泄露漏洞

热门文章

  1. RK3568-签批一体机-用户案例
  2. 数据中心基础设施是应该纵向扩展还是横向扩展?
  3. 计算机专业毕业论文大纲,计算机科学与技术专业《毕业设计》教学大纲.doc
  4. [培训-无线通信基础-4]:宽带和方向性无线信道(多普勒扩展)
  5. norton诺顿symantec endpoint protection无密码卸载
  6. python实现快三游戏(简易)
  7. 华为手机助手安卓版_专注助手免费下载-专注助手安卓版 v1.1手机版
  8. Pod控制器之hpa
  9. linux kde 桌面发行,KDE 桌面发行版本 Kubuntu 14.04 LTS
  10. JDK1.8+的String(字符串)常量池理解