linux程序设计基础——概述,6.Linux程序设计基础—Makefile.pdf
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相关推荐
- linux程序设计基础——概述,3.linux程序设计基础—vi使用
3.linux程序设计基础-vi使用 (24页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.9 积分 Haubo Training Center L ...
- linux系统的gui程序,Linux GUI子系统概述 GUI子系统的构成及工作流程
作者:Nick 开始前的几点说明: 本文会尽量从初学者的角度去描述整个Linux整个图形子系统,但由于其复杂性,涉及到的模块比较多,可能会需要一些相关的先验知识: 对于系统的介绍,分析的着重点可能不会 ...
- 程序员 论坛 linux,用了五年Linux,三分钟带你揭开Linux过程内幕
从高级视角查看Linux引导过程,高手带你揭开Linux过程内幕 嵌入式ARM 嵌入式ARM 嵌入式ARM 微信号 功能介绍 关注这个时代最火的嵌入式ARM,你想知道的都在这里. 2018-08-21 ...
- Java程序员掌握的Linux 基本操作
教程:韩顺平教育 B站链接 远程登录 说明:公司开发场景: Linux服务器是开发小组共享 正式上线的项目是运行在公网 所以程序员需要远程登录到Linux进行项目管理或者开发. 远程登录客户端常用: ...
- 嵌入式linux网络编程之——5年程序员给你深度讲解socket套接字
以下内容转载自 https://www.toutiao.com/i6827837032622981636/ 本文主要给大家分享网络七层概念之网络编程socket,前边的章节已经给大家讲述了链路层.物理 ...
- linux下 为自己编写的程序 添加tab自动补全 功能
linux下 为自己编写的程序 添加tab自动补全功能 入门 complete 在我的tmp下随便写了一个a.sh, 为他补全 edit /etc/bash_completion.d/foo _foo ...
- linux里运行windows,在Linux上运行Windows应用程序
当前位置:我的异常网» Linux/Unix » 在Linux上运行Windows应用程序 在Linux上运行Windows应用程序 www.myexceptions.net 网友分享于:2015- ...
- [Linux] PHP程序员玩转Linux系列-腾讯云硬盘扩容挂载
1.PHP程序员玩转Linux系列-怎么安装使用CentOS 2.PHP程序员玩转Linux系列-lnmp环境的搭建 3.PHP程序员玩转Linux系列-搭建FTP代码开发环境 4.PHP程序员玩转L ...
- [Linux] PHP程序员玩转Linux系列-Linux和Windows安装nginx
1.PHP程序员玩转Linux系列-怎么安装使用CentOS 2.PHP程序员玩转Linux系列-lnmp环境的搭建 3.PHP程序员玩转Linux系列-搭建FTP代码开发环境 4.PHP程序员玩转L ...
最新文章
- 最让程序员自豪的事情是什么?
- OpenCV学习之Mat::at()理解
- Towards a topological-geometrical theory of group equivariant non-expansive operators for data analy
- 部署在CloudFoundry上的nodejs如何正确使用port环境变量
- 这8个方法让你成为最优秀的程序员
- Linux历史,安装,分区,版本
- spring boot中 使用http请求
- linux tune2fs命令详解
- Android之网络编程
- 2008年秋季学期文兴小学四年级班主任工作计划
- Library not found for -lPods-Unity-iPhone 的解决方法
- AJAX提交表单数据
- Redis - 在电商购物车场景下的实战分析
- java中选择排序,冒泡排序和二分法查找学习记录
- 欧姆龙plc解密实例_OMRON 功能块解密
- oracle12c的CDB与PDB
- CANdelaStudio编辑CDD——学习碎笔
- shell脚本清理网宿cdn缓存
- Elasticsearch学习笔记(三)安装hanlp中文分词插件及同义词配置
- QQMail邮件泄露漏洞
热门文章
- RK3568-签批一体机-用户案例
- 数据中心基础设施是应该纵向扩展还是横向扩展?
- 计算机专业毕业论文大纲,计算机科学与技术专业《毕业设计》教学大纲.doc
- [培训-无线通信基础-4]:宽带和方向性无线信道(多普勒扩展)
- norton诺顿symantec endpoint protection无密码卸载
- python实现快三游戏(简易)
- 华为手机助手安卓版_专注助手免费下载-专注助手安卓版 v1.1手机版
- Pod控制器之hpa
- linux kde 桌面发行,KDE 桌面发行版本 Kubuntu 14.04 LTS
- JDK1.8+的String(字符串)常量池理解