//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.h
gcc -o hello c.o b.o //这个是shell命令
c.o:c.c a.h
gcc -c c.c //其中gcc -c c.c是指编译生产c.o(改成gcc -o c.o c.c会报错)
b.o:b.c a.h
gcc -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.o
gcc -o hello $(objects)
c.o:c.c a.h
gcc -c c.c
b.o:b.c a.h
gcc -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.o
gcc -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。

makefile——小试牛刀的更多相关文章

  1. 说说Makefile那些事儿

    说说Makefile那些事儿 |扬说|透过现象看本质 工作至今,一直对Makefile半知半解.突然某天幡然醒悟,觉得此举极为不妥,只得洗心革面从头学来,以前许多不明觉厉之处顿时茅塞顿开,想想好记性不 ...

  2. Xamarin+Prism小试牛刀:定制跨平台Outlook邮箱应用(后续)

    在[Xamarin+Prism小试牛刀:定制跨平台Outlook邮箱应用]里面提到了Microsoft 身份认证,其实这也是一大块需要注意的地方,特作为后续补充这些知识点.上章是使用了Microsof ...

  3. 编写一个通用的Makefile文件

    1.1在这之前,我们需要了解程序的编译过程 a.预处理:检查语法错误,展开宏,包含头文件等 b.编译:*.c-->*.S c.汇编:*.S-->*.o d.链接:.o +库文件=*.exe ...

  4. 编写简单的Makefile文件

    makefile中的编写内容如下: www:hello.c x.h gcc hello.c -o hello clean: rm hello www:hello.c  x.h 表示生成www这个文件需 ...

  5. 简单编写Makefile

    相信很多朋友都有过这样的经历,看着开源项目中好几页的makefile文件,不知所云.在日常学习和工作中,也有意无意的去回避makefile,能改就不写,能用ide就用ide.其实makefile并没有 ...

  6. [转]Linux中configure/makefile

    本文教你如何使用autoconf.automake等来制作一个以源代码形式(.tar.gz)发布的软件.并可在执行configure时使用自定义参数. 一.概述和基础知识 在Linux下得到一个以源代 ...

  7. Linux内核配置、编译及Makefile简述

    Hi,大家好!我是CrazyCatJack.最近在学习Linux内核的配置.编译及Makefile文件.今天总结一下学习成果,分享给大家^_^ 1.解压缩打补丁 首先是解压缩你获取到的Linux内核. ...

  8. make 查找的文件名顺序为:“GNUmakefile”、“makefile”、“Makefile”

    默认的情况下,make会在工作目录(执行make的目录)下按照文件名顺序寻找makefile文件读取并执行,查找的文件名顺序为:“GNUmakefile”.“makefile”.“Makefile”. ...

  9. 实例:对2个Makefile的备注

    实例1:Makefile编译链接简单.c函数 example.c Makefile exe: example.c gcc example.c -o exe clean: rm exe 执行效果: 实例 ...

随机推荐

  1. javascript进阶笔记(3)

    本篇文章我们来学习和讨论一下js中的闭包.闭包是纯函数式编程的一个特性,因为它们能够大大简化复杂的操作.在js中,闭包的重要性不言而喻! 简单的说,闭包(closure)是 一个函数在创建时 允许 该 ...

  2. leetcode python 005

    ##  给定字符串,寻找最长回文子串##  单回文,双回文 def findh(s):    ## 单回文    ld,l=[],len(s)    if len(s)<3:        re ...

  3. NAND Flash vs NOR Flash

    Avinash Aravindan reference:https://www.embedded.com/design/prototyping-and-development/4460910/2/Fl ...

  4. U盘如何去除写保护

    用一个简单而粗暴的方法去除U盘写保护: www.upantool.com/hfxf/xiufu//FormatTool.html#softdown 没有比这个更牛的软件了.

  5. cf467D(map,vector,bfs,特点提取)

    D. Fedor and Essay time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  6. alter system archive log current作用及和alter system switch logfile区别

    alter system archive log current 是归档当前的重做日志文件,不管自动归档有没有打都归档. alter system switch logfile 是强制日志切换,不一定 ...

  7. TensorFlow函数:tf.ones_like

    tf.ones_like 函数 ones_like( tensor, dtype=None, name=None, optimize=True ) 定义在:tensorflow/python/ops/ ...

  8. REST easy with kbmMW #17 – Database 6 – Existing databases

    kbmMW已经包含了非常精细的功能来确定和解释数据库中表的元数据. 在下一版本中,这个功能将得到进一步加强,可以导入现有数据库中的表,自动创建与表相匹配的ORM实体类. 这意味着你能够使用kbmMW的 ...

  9. Day2作业及默写

    1.判断下列逻辑语句的True,False. 1) 1 > 1 or 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6 Fal ...

  10. 键盘keycode对照表