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的更多相关文章

  1. Makefile的学习笔记

    Makefile的学习笔记 标签: makefilewildcard扩展includeshellfile 2012-01-03 00:07 9586人阅读 评论(2) 收藏 举报  分类: Linux ...

  2. Make和Makefile编写(详见GCC手册)

    Makefile和Make Rules 多模块软件.依赖树和Make 默认规则 Make使用程序对简单变量的支持 内建变量 虚目标 特殊目标 一般性语法错误及其纠正措施 命令行的使用和调试 Makef ...

  3. linux 下C语言编程库文件处理与Makefile编写

    做开发快3年了,在linux下编译安装软件算是家常便饭了.就拿gcc来说,都有不下10次了,可基本每次都会碰到些奇奇怪怪的问题.看来还是像vs.codeblocks这样的ide把人弄蠢了.便下定决心一 ...

  4. 单目录下多文件 makefile编写

    makefile很久就接触过了,但是一直没怎么深入的去学习和总结:在项目中我也只是看看makefile或者修改部分语句,全部自己动手写的话还真没有:知识在于沉淀,这句说的非常好,所以现在把自己理解的东 ...

  5. 运用Autoconf和Automake生成Makefile的学习之路

    作为Linux下的程序开发人员,大家一定都遇到过Makefile,用make命令来编译自己写的程序确实是很方便.一般情况下,大家都是手工写一个简单Makefile,如果要想写出一个符合自由软件惯例的M ...

  6. makefile编写差异

    由于zlib动态库在linux下引用的问题引出了对于简练的makefile的学习.之前通过看网络上的一些文章自己也算简单了解如何编写一个makefile,可总是不那么美观,今天经过辉哥的指点,对于ma ...

  7. Yocto开发笔记之《Makefile编写》(QQ交流群:519230208)

    开了一个交流群,欢迎爱好者和开发者一起交流,转载请注明出处. QQ群:519230208,为避免广告骚扰,申请时请注明 “开发者” 字样 =============================== ...

  8. linux --> Makefile编写

    Makefile编写 单目录 测试程序在同一个文件中,共有func.h.func.c.main.c三个文件,Makefile写法如下所示: CC = gcc CFLAGS = -g -Wall mai ...

  9. Linux——makefile编写

    以前对makefile的编写,限于刚开始接触,我都比较局限一些死板的格式,有时候就会显得有些繁琐.在进一步了解一些系统编译和链接的知识后,对makefile编写流程有了一些新的认识,所以来此梳理梳理, ...

随机推荐

  1. window 包管理器--Chocolatey

    Chocolatey 介绍 在 Linux 下,大家喜欢用 apt-get 来安装应用程序,如今在 windows 下,大家可以使用 Chocolatey 来快速下载搭建一个开发环境. Chocola ...

  2. JVM性能优化--JVM参数配置,使用JMeter简单测试配合说明参数调优

    一.JVM参数配置 1.常见参数配置 -XX:+PrintGC 每次触发GC的时候打印相关日志 -XX:+UseSerialGC 串行回收 -XX:+PrintGCDetails 更详细的GC日志 - ...

  3. Flexbox布局入门笔记

    1.display:flex 设定为Flexbox布局容器. 2.flex-direction: row表示在水平方向展开可伸缩项:column表示在垂直方向展开可伸缩项:总之就是定义主轴(侧轴方向) ...

  4. security Alternative forms secuerity

    security Alternative forms secuerity (mostly obsolete) English Alternative forms secuerity Pronuncia ...

  5. linux技能点七 shell

    shell脚本:定义,连接符,输入输出流,消息重定向,命令的退出状态,申明变量,运算符,控制语句 定义:linux下的多命令操作文件 连接符: ::用于命令的分隔符,命令会从左往右依次执行 & ...

  6. day 26作业

    作业 1.整理TCP三次握手.四次挥手图 三次握手 起初A和B都处于CLOSED状态--B创建TCB,处于LISTEN状态,等待A请求--A创建TCB,发送连接请求(SYN=1,seq=x),进入SY ...

  7. golang错误处理

    1. 错误 错误用内建的error类型来表示. type error interface { Error() string } error 有了一个签名为 Error() string 的方法.所有实 ...

  8. vue 父组件与子组件的三生三世

    父组件和子组件相互传值:https://www.cnblogs.com/cxscode/p/11187989.html vue父组件触发子组件方法:https://www.cnblogs.com/cx ...

  9. 数据库开发-Django ORM的一对多查询

    数据库开发-Django ORM的一对多查询 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.联合主键问题 CREATE TABLE `employees` ( `emp_no` ...

  10. MySQL/MariaDB数据库的主从级联复制

      MySQL/MariaDB数据库的主从级联复制 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.主从复制类型概述 1>.主从复制 博主推荐阅读: https://ww ...