//a.h,包含头文件stdio.h,并且定义一个函数print
#include<stdio.h>
void print();//b.c,包含头文件a.h,然后就可以写print函数的内容了
#include"a.h"
void print(){
printf("who are you\n");
}//c.c,包含头文件a.h,调用print函数
#include"a.h"
int main(){
print();
return 0;
}

下面是Makefile 固定命名,记住这些文件全部在同一文件夹下,全部编写完成后,执行make命令就会自动执行Makefile了,


hello:c.o b.o   //其中hello是目标文件,c.o和b.o是依赖文件,需要这两个文件才能生成hello,因为现在还没有c.o文件,所以跳到c.o:c.c a.h那里,然后执行gcc -c c.c 执行完成后又返回该条语句,发现也没有b.o,所以跳到b.o:b.c a.hgcc -o hello c.o b.o  //这个是shell命令
c.o:c.c a.hgcc -c c.c    //其中gcc -c c.c是指编译生产c.o(改成gcc -o c.o c.c会报错)
b.o:b.c a.hgcc -c b.c
clean:      //执行make clean会执行下面的语句rm hello c.o b.o

执行效果如下

[root@bogon bp]# ls
a.h  b.c  c.c  Makefile
[root@bogon bp]# make
gcc -c c.c
gcc -c b.c
gcc -o hello c.o b.o
[root@bogon bp]# ls
a.h  b.c  b.o  c.c  c.o  hello  Makefile
[root@bogon bp]# ./hello
who are you

改进后的方法,只需要修改Makefile

[root@bogon bp]# cat Makefile
objects=c.o b.o    相当于C语言的宏定义变量
hello:c.o b.ogcc -o hello $(objects)
c.o:c.c a.hgcc -c c.c
b.o:b.c a.hgcc -c b.c
clean:rm hello $(objects)

我们还能更精简这个过程,也是只修改Makefile

[root@bogon bp]# make
cc    -c -o c.o c.c
cc    -c -o b.o b.c
gcc -o hello c.o b.o
[root@bogon bp]# ls
a.h  b.c  b.o  c.c  c.o  hello  Makefile
[root@bogon bp]# ./hello
who are you
[root@bogon bp]# cat Makefile
objects=c.o b.o
hello:c.o b.ogcc -o hello $(objects)
$(bojects):a.h  因为c.o和b.o都依赖a.h
c.o:c.c     可以省略掉gcc
b.o:b.c
clean:rm hello $(objects)
[root@bogon bp]#

上面是我自己总结写的,原文如下http://www.cnblogs.com/sld666666/archive/2010/04/08/1707789.html

进行内核编译的时候make会多两个选项,-C和-M.

其中-C $(KDIR) 指明跳转到内核源码目录下读取那里的Makefile;M=$(PWD) 表明然后返回到当前目录继续读入、执行当前的Makefile。

转载于:https://www.cnblogs.com/biaopei/p/7730658.html

makefile——小试牛刀相关推荐

  1. 浅显易懂 Makefile 入门 (12)— Makefile 常见的错误信息

    1. 常见的错误信息 make 执行过程中所产生错误并不都是致命的,特别是在命令行之前存在 -.或者 make 使用 -k 选项执行时. make 执行过程的致命错误都带有前缀字符串 ***.错误信息 ...

  2. 浅显易懂 Makefile 入门 (10)— 嵌套执行 make、export 的使用

    1. 嵌套执行 make 在一个大的工程文件中,不同的文件按照功能被划分到不同的模块中,每个模块可能都会有自己的编译顺序和规则,如果在一个 Makefile 文件中描述所有模块的编译规则,就会很乱,执 ...

  3. 浅显易懂 Makefile 入门 (09)— include 文件包含、MAKECMDGOALS

    1. include文件包含 当 make 读取到 include 关键字的时候,会暂停读取当前的 Makefile,而是去读 include 包含的文件,读取结束后再继读取当前的 Makefile ...

  4. 浅显易懂 Makefile 入门 (08)— 默认 shell (/bin/sh)、命令回显、make参数(-n 只显示命令但不执行,-s 禁止所有回显)、单行命令、多行命令、并发执行

    1. shell 相关 1.1 默认 shell Makefile 所使用的命令是由 shell 命令行组成,他们是一条一条执行的. 多个命令之间要使用分号隔开,Makefile 中的任何命令都要以 ...

  5. 浅显易懂 Makefile 入门 (07)— 其它函数(foreach 、if、call、origin )

    1. foreach 函数 foreach 函数定义如下: $(foreach <var>,<list>,<text>) 函数的功能是:把参数 <list&g ...

  6. 浅显易懂 Makefile 入门 (06)— 文件名操作函数(dir、notdir、suffix、basename、addsuffix、addperfix、join、wildcard)

    编写 Makefile 的时候,很多情况下需要对文件名进行操作.例如获取文件的路径,去除文件的路径,取出文件前缀或后缀等等. 注意:下面的每个函数的参数字符串都会被当作或是一个系列的文件名来看待. 1 ...

  7. 浅显易懂 Makefile 入门 (03)— 目标文件搜索(VPATH 和 vpath 的区别和使用)、隐含规则

    1. 目标文件搜索(VPATH和vpath) 如果需要的文件是存在于不同的路径下(即源文件与 Makefile 文件不在同一个路径下),在编译的时候就用到了 Makefile 中为我们提供的目录搜索文 ...

  8. 浅显易懂 Makefile 入门 (02)— 普通变量和自动变量定义、使用($@、$^、$< 作用)、变量覆盖 override、变量的来源 origin

    1. 变量的定义 Makefile 文件中定义变量的基本语法如下: 变量的名称=值列表 变量的名称可以由大小写字母.阿拉伯数字和下划线构成.等号左右的空白符没有明确的要求,因为在执行 make 的时候 ...

  9. 浅显易懂 Makefile 入门 (01)— 什么是Makefile、为什么要用Makefile、Makefile规则、Makefile流程如何实现增量编译

    1. 什么是 Makefile Makefile 文件描述了 Linux 系统下 C/C++ 工程的编译规则,它用来自动化编译 C/C++ 项目.一旦写编写好 Makefile 文件,只需要一个 ma ...

最新文章

  1. AutoFac在项目中的应用
  2. 光流 | 基于光流的人体异常行为检测(附源代码)
  3. vue取通过key取value_vue怎么获取radio、checkbox选中的值
  4. 设计模式到底离我们有多远
  5. 面向对象 VS 面向过程
  6. 基于motion的视频压缩的实时监控系统
  7. HoloLens还太远 必应才是微软目前的重头戏
  8. sentaurus TCAD的安装与使用
  9. HTML菜鸟教程学习笔记
  10. PaaS、IaaS 、SaaS、Bass、Fass、无服务的理解与区别
  11. 【kubernetes】k8s使用客户端连接haproxy访问高可用集群流程详细说明【使用kubeconfig连接haproxy】【kubeconfig配置全部流程】
  12. 阿里旺旺自动回复工具开发一
  13. 海胆状聚苯乙烯与α-氧化铁复合结构微球/聚苯乙烯/氧化石墨烯/CNTs复合微球研究方式
  14. java8 Arrays.sort 与Arrays.parallelSort
  15. MFC使用Haru free pdf lib生成pdf文件
  16. CXF之七 传输文件
  17. Ubuntu18.04+ros-melodic (包括Ubuntu16.04+ros-kinetic)乐视奥比中光相机在nano、tx2、PC等设备上的安装与使用,并解决无法显示rgb信息的问题
  18. 高中数学基础-1.3.1函数的最大(小)值,单调递增区间和单调递减区间
  19. 阿里云(python ocr)
  20. lookUpEdit隐藏列

热门文章

  1. linux网络编程之广播详细代码及文档说明 -,Linux网络编程之广播
  2. android 链接分享到朋友圈,android 分享到微信朋友圈或微信好友
  3. dtm文件生成等高线 lisp_南方cass如何用图面高程点生成等高线
  4. UNIX(进程间通信):03---僵尸进程
  5. C语言: ---Linux下ulimit是什么鬼
  6. (一)nodejs循序渐进-nodejs环境安装(基础篇)
  7. Python(12)-while语句+赋值运算符号+转义字符
  8. python数组初始化_Python Numpy 数组的初始化和基本操作
  9. Linux加密框架 crypto 哈希算法举例 MD5
  10. Unix 多进程编程