From: http://www.cnblogs.com/mydomain/archive/2011/08/12/2136083.html

1、make是一个解释makefile中指令的命令工具。Make工具最主要也是最基本的功能就是通过makefile文件来描述源程序之间的相互关系并自动维护编译工作。而makefile 文件需要按照某种语法进行编写,文件中需要说明如何编译各个源文件并连接生成可执行文件,并要求定义源文件之间的依赖关系。

Makefile 里主要包含了五种类型的语句/行:显式规则、隐式规则、变量定义、文件指示和注释。

make命令格式:make [-f Makefile] [option] [target]

2、编译和链接规则

1)如果这个工程没有编译过,那么我们的所有C文件都要编译并被链接。

2)如果这个工程的某几个C文件被修改,那么我们只编译被修改的C文件,并链接目标程序。

3)如果这个工程的头文件被改变了,那么我们需要编译引用了这几个头文件的C文件,并链接目标程序。

3、makefile的构成

(1)需要由make工具创建的目标体(target),通常是目标文件或可执行文件

(2)要创建的目标体所依赖的文件(dependency_file)。

(3)创建每个目标体时需要运行的命令(command)。

格式如下:

target:dependency_files

<TAB>command

在这里面,变量一般都是字符串,他有点像c语言的宏。

makefile中的文件指示,包含3部分,一个是在一个Makefie中引用另一个Makefile,就像c语言的include一样;另一个是根据某些情况指定Makefile中的有效部分,就像C语言中的预编译#if一样;还有就是定义一个多行的命令。

注释:注释符用"#",可以用反斜框进行转义,如输入注释,“\#”。

4、makefile的书写

1)所有文件都在一个目录中

示例

st_work : main.o  st_work.o  fun.o

gcc  main.o  st_work.o  fun.o  -o  st_work main (命令以Tab开头)

st_work.o : st_work.c

gcc  -c st_work.c  -o st_work

main.o : main.c  st_work.h

gcc -c main.c -o  main.o

fun.o : fun.c fun.h

gcc -c  fun.c -o fun.o

clean:

rm -f st_work *.o

2)多目录的写法

我们这里,在工作目录下有4个文件夹  分别是 sources(源文件) obj (中间文件)headers(头文件) bin(目标文件)

sources里面有 main.c  st_work.c fun.c

obj 里面最初没有文件

headers 里面有 fun.h st_work.h

最终目标取名为 st_work,它应存放到bin里面

预备知识:

gcc 的3个参数:

1. -o 指定目标文件

gcc sources/main.c -o bin/main

2. -c 编译的时候只生产目标文件不链接

gcc -c sources/main.c -o obj/main.o

3. -I 主要指定头文件的搜索路径

gcc -I headers -c main.c -o main.o

4. -l 指定静态库

gcc -lpthread ...

示例

bin/st_work : obj/main.o  obj/st_work.o  obj/fun.o

gcc  obj/main.o obj/st_work.o  obj/fun.o  -o bin/st_work  (命令以Tab开头)

obj/st_work.o : sources/st_work.c

gcc  -I  headers -c sources/st_work.c  -o  obj/st_work.o

obj/main.o : sources/main.c

gcc  -I  headers -c sources/main.c    -o  obj/main.o

obj/fun.o  : sources/fun.c

gcc  -I  headers -c sources/fun.c     -o  obj/fun.o

clean:

rm -f bin/st_work obj/*.o

3)隐式规则的引入

    3个预定义变量介绍:

1.  $@     表示要生成的目标

2.  $^     表示全部的依赖文件

3.  $<     表示第一个依赖文件

bin/st_work : obj/main.o  obj/st_work.o  obj/fun.o

gcc  $^  -o $@  (命令一定要用以Tab开头)

obj/st_work.o : sources/st_work.c

gcc  -I  headers   -c $< -o  $@

obj/main.o : sources/main.c

gcc  -I  headers   -c $< -o  $@

obj/fun.o  : sources/fun.c

gcc  -I  headers   -c $< -o  $@

clean:

rm -f bin/st_work obj/*.o

makefile常用语法讲解(1)相关推荐

  1. Android 代码混淆语法讲解及常用模板(转)

    转载请注明原博客地址  Android 代码混淆语法讲解及常用模板 前言 混淆对于每一个开发者来说都不陌生,对于大多数 APP 而言,在上线之前,通常会进行代码混淆,加固,防止自己的 APP 被别人轻 ...

  2. Makefile的语法

    一.介绍 1.makefile的条目组成 Linux中使用make命令来编译程序,而make命令所执行的动作依赖于Makefile文件.最简单的Makefile文件如下: hello: hello.c ...

  3. make工具和Makefile基础语法(含有交叉编译、pthread_create()的处理)

    目录 含有交叉编译.pthread_create()处理 初次使用 1.编写Makefile文件 2.make 3.make clean Makefile基本语法 1.Makefile规则格式 2.变 ...

  4. 【SQLite预习课3】SQLite 的常用语法

    作者主页:Designer 小郑 作者简介:软件工程师一枚,来自浙江宁波,负责开发管理公司OA项目,专注软件前后端开发(Vue.SpringBoot和微信小程序).系统定制.远程技术指导.CSDN学院 ...

  5. Helm模板常用语法介绍与简单应用场景

    Helm模板常用语法介绍与简单应用场景 文章目录 Helm模板常用语法介绍与简单应用场景 什么是Helm _help.tpl子模版 应用场景 预定义对象 关于变量 关键字及应用 函数 流程与控制 什么 ...

  6. Mysql数据库存储过程基本语法讲解

    Mysql数据库存储过程基本语法讲解 一般情况下MYSQL以:结尾表示确认输入并执行语句,但在存储过程中:不是表示结束,因此可以用该命令将:号改为//表示确认输入并执行.存储过程如同一门程序设计语言, ...

  7. Linux下Makefile编写语法

    原创 Linux下Makefile编写语法 2016-07-29 08:31:53 Datrilla 阅读数 1386更多 分类专栏: Linux Makefile 版权声明:本文为博主原创文章,遵循 ...

  8. Makefile文件语法规则及用法总结

    一.Makefile的作用 Makefile文件实质上就是一个工程代码编译脚本,一旦写好,只需要一个make命令,整个工程就会自动按照脚本的规定方式编译,极大的提高了软件开发的效率. make是系统指 ...

  9. Linux后台开发系列之「09.Makefile 基础语法」

    Makefile 版权声明:本文为 cdeveloper 原创文章,可以随意转载,但必须在明确位置注明出处! Makefile 简介 Makefile 是一个管理项目的配置文件,它主要有 2 个作用: ...

最新文章

  1. 常见linux网络端口对照表(excel),常见子网掩码对照表Excel下载(反、正掩码)-数通工程师的傍身笔记...
  2. ubuntu vscode上使用cmake、编译、调试
  3. 线程高级应用-心得9-空中网的三道面试题,考察应试者的线程掌握的深度
  4. TClientDataSet[22]: 数组字段与 ObjectView
  5. Bash中执行存储过程或普通的SQL命令
  6. vs生成qt moc文件
  7. asp 文本转时间_三分钟学会在ASP.NET Core MVC 中使用Cookie
  8. 8086汇编工作环境_ARM汇编进阶
  9. Apache ActiveMQ消息中间件的基本使用
  10. 被弃用的 Docker 会被 Podman 取代吗?
  11. CountDownLatch和cyclicbarrier的使用
  12. Leetcode106 由中序序列和后序序列构建二叉树
  13. 关闭Apple Watch 上的激活锁的方法
  14. ANSYS 有限元分析 选择与组件
  15. HTML5+CSS3基础
  16. ode45解微分方程(组)
  17. 通过修改window本地hosts文件修改域名指向
  18. 什么是子域名?如何设置子域名解析?
  19. EasyUI项目驱动学习
  20. (向量空间)概念和法则的人为定义 I

热门文章

  1. 将人民币的数字表示转化成大写表示(C#版)
  2. 纹个鸡儿天才小熊猫_给熊猫用户的5个提示
  3. 糖药病数据集分类_使用optuna和mlflow进行心脏病分类器调整
  4. leetcode 213. 打家劫舍 II(dp)
  5. seaborn线性关系数据可视化:时间线图|热图|结构化图表可视化
  6. stark组件开发之组合搜索基本显示
  7. FtpWebRequest.UsePassive属性:设置FTP工作模式
  8. vue动态绑定类样式ClassName知多少
  9. Linux平台上搭建apache+tomcat负载均衡集群
  10. 【蓝桥杯】历届试题 错误票据