MAKEFILE编写学习--1
makefile是在编译中大型程序中使用的自动化编译工具make依赖的指令文件。这样可以使得程序的编译更加便捷快速。
makefile的一般规则如下:
target ... : prerequisites ...
command
target即是一个目标文件,它可以是可执行程序、目标中间文件、标记(label)等。这个目标要想编译出来需要的前提条件就是prerequisites这些已存在的文件。编译过程中的规则则是由command里面的各个命令组成。command以一个Tab起头。make会比较目标文件与条件中的文件更新时间,一旦有文件被修改,make就会依赖于这些前提文件进行重新编译。makefile中第一个target会被认为是make的默认目标。
当prerequisites是空的时候,前面的目标文件被当成一个命令,使用make执行时会直接执行command里的命令。
clean :
rm edit main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o
执行这个make clean会将当前文件夹下的几个中间文件删除掉。
makefile中可以使用变量,类似于C语言中的宏:
edit : main.o kda.o command.o
gcc -o edit main.o kda.o command.o
这里面如果要向edit的依赖项中添加文件,那么也得向command中加入同样的文件,makefile一大,就很难批量处理,这时候可以声明变量:
objects = main.o kda.o command.o
那么上面的makefile可以改成:
objects = main.o kda.o command.o
edit : $(objects)
gcc -o edit $(objects)
通过美元符号$(变量名)的方式来引用变量。
make工具会.o文件对应的.c文件自动的添加到依赖关系中。如果找到一个foo.o,那么对应的foo.c就会自动的加入到依赖关系并且会在command中自动隐式添加一行gcc -o 。那么foo,o的生成就可以简写为:
foo.o : other_files_list
其中的command直接就不用写了。
.PHONY用来修饰target,表示它是一个“伪目标”。
总结:
- 显式规则
- 隐式规则
- 变量定义
- 引用文件
- 注释
makefile中只有行注释,注释以#开头。
MAKEFILE编写学习--1的更多相关文章
- Makefile的学习笔记
Makefile的学习笔记 标签: makefilewildcard扩展includeshellfile 2012-01-03 00:07 9586人阅读 评论(2) 收藏 举报 分类: Linux ...
- Make和Makefile编写(详见GCC手册)
Makefile和Make Rules 多模块软件.依赖树和Make 默认规则 Make使用程序对简单变量的支持 内建变量 虚目标 特殊目标 一般性语法错误及其纠正措施 命令行的使用和调试 Makef ...
- linux 下C语言编程库文件处理与Makefile编写
做开发快3年了,在linux下编译安装软件算是家常便饭了.就拿gcc来说,都有不下10次了,可基本每次都会碰到些奇奇怪怪的问题.看来还是像vs.codeblocks这样的ide把人弄蠢了.便下定决心一 ...
- 单目录下多文件 makefile编写
makefile很久就接触过了,但是一直没怎么深入的去学习和总结:在项目中我也只是看看makefile或者修改部分语句,全部自己动手写的话还真没有:知识在于沉淀,这句说的非常好,所以现在把自己理解的东 ...
- 运用Autoconf和Automake生成Makefile的学习之路
作为Linux下的程序开发人员,大家一定都遇到过Makefile,用make命令来编译自己写的程序确实是很方便.一般情况下,大家都是手工写一个简单Makefile,如果要想写出一个符合自由软件惯例的M ...
- makefile编写差异
由于zlib动态库在linux下引用的问题引出了对于简练的makefile的学习.之前通过看网络上的一些文章自己也算简单了解如何编写一个makefile,可总是不那么美观,今天经过辉哥的指点,对于ma ...
- Yocto开发笔记之《Makefile编写》(QQ交流群:519230208)
开了一个交流群,欢迎爱好者和开发者一起交流,转载请注明出处. QQ群:519230208,为避免广告骚扰,申请时请注明 “开发者” 字样 =============================== ...
- linux --> Makefile编写
Makefile编写 单目录 测试程序在同一个文件中,共有func.h.func.c.main.c三个文件,Makefile写法如下所示: CC = gcc CFLAGS = -g -Wall mai ...
- Linux——makefile编写
以前对makefile的编写,限于刚开始接触,我都比较局限一些死板的格式,有时候就会显得有些繁琐.在进一步了解一些系统编译和链接的知识后,对makefile编写流程有了一些新的认识,所以来此梳理梳理, ...
随机推荐
- 对于解决VS2015启动界面卡在白屏的处理方法
有时候会遇到这种情况,仅供参考 找到devenv.exe所在文件夹,按住Shift,在空白地方右键,选择“在此处打开命令窗口”,在打开的窗口中输入devenv /ResetSettings 重新设置V ...
- Mybatis中使用association进行关联的几种方式
这里以一对一单向关联为例.对使用或不使用association的配置进行举例. 实体类: @Data @ToString @NoArgsConstructor public class IdCard ...
- P1108 低价购买 (DP)
题目 P1108 低价购买 解析 这题做的我身心俱惫,差点自闭. 当我WA了N发后,终于明白了这句话的意思 当二种方案"看起来一样"时(就是说它们构成的价格队列一样的时候),这2种 ...
- cs/bs架构的区别
Client/Server是建立在局域网的基础上的,基于客户端/服务器,安全,响应快,维护难度大,不易拓展,用户面固定,需要相同的操作系统. Browser/Server是建立在广域网的基础上的,基于 ...
- Java框架之MyBatis框架(一)
一.框架介绍: MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动.创建connection.创建sta ...
- idea2019的安装与激活
1.安装及相关资料下载 链接:https://pan.baidu.com/s/1njKjorAvaWftuGCvCQzP3A 提取码:r8h8 2.安装步骤 几乎是傻瓜式的安装,点击下一步即可 注意两 ...
- 宿主机计划任务执行docker相关命令
这个问题拖了好几个月百思不解,或许是由于基础不牢的缘故;百度等等搜索一大篇,还真有人遇到了相似问题 问题:宿主机写好计划任务,是mongodump命令来备份mongo数据库,结果在计划任务里是执行不了 ...
- manjaro跳坑记
why manjaro 有两个原因: 我的电脑上win10+ubuntu16.04,ubuntu上跑一个程序会crash导致重启,不知道如何排查,想换个系统试试.(别人机器上同样G++版本不会cras ...
- k8s namespace权限问题无法读取configmap
报错信息: Message: Forbidden!Configured service account doesn't have access. Service account may have be ...
- ireport(1.2.7)的IllegalAccessError异常
IllegalAccessError异常: Exception in thread "main" java.lang.IllegalAccessError: tried to ac ...