跟我一起写makeflie---学习总结

makefile关系到了整个工程的编译原则,会不会写makefile从侧面说明了一个人是否具备完成大型工程的能力。在Unix下将源文件编译成中间代码文件,也就是.o文件,即object file,再把大量的object file合成可执行文件,这个动作叫做链接(link)。当源文件过多的时候,我们通过makefile 文件去管理这些中间目标文件,用make命令去执行makefile文件。
一、makefile的编写规则
make命令编译和链接makefile的规则是:
1) 如果这个工程没有编译过,所有的C文件都要编译并链接;
2) 如果这个工程的某几个C文件被修改,我们只编译被修改的C文件,并链接目标程序;
3) 如果工程的头文件被改变了,需编译引用了这几个头文件的C文件,并链接目标程序。
makefile的规则:
target...:prerequisites...
command
...
...
target是一个目标文件,可以是Object File,也可以是执行文件,还可以是一个标签。prerequisites就是生成target所需的文件或者目标,command是需要执行的命令。
二、如何书写makefile
1)规则举例
foo.o:foo.c defs.h #foo模块
cc -c -g foo.c
foo.o是我们的目标,foo.c和defs.h是目标所依赖的源文件,而只有一个命令“cc -c -g foo.c”(命令必须以tab开头),这个规则告诉我们两件事:
a.文件的依赖关系,foo.o依赖于foo.c 和 defs.h文件;
b.生成(或更新)foo.o文件。

  1. 规则用法
    target...:prerequisites...
    command
    ...

    target...:prerequisites...;command
    command
    ...
    target是文件名,以空格分开,可以使用通配符,可以是多个文件;
    command是命令行,如果与target...:prerequisites...在一行,可用 ; 号做分隔,如果不在同一行,则必须以【tab键】开头;
    prerequisites为目标所依赖的文件(或目标)。
    如果命令太长可以用“\”作为换行符,make对上一行有多少个字符没有限制。
    3)在规则中使用通配符
    makefile支持3个通配符:“*”,“?”和“[...]”,这和Unix的B-shell是相同的。
    4)自动化变量
    $@:表示规则中的目标文件集;
    $%:仅当目标是函数库文件,表示规则中的目标成员名。
    $<:依赖目标中的第一个目标名字;
    $? :所有比目标新的依赖目标的集合。以空格分隔
    $^:所有依赖目标的集合。以空格分隔。如果在依赖目标中有重复的,那么这个变量会去除重复的依赖目标,只保留一份。
    $+:类似"$^",不过它不去除重复的依赖项
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 225,226评论 6 524
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 96,509评论 3 405
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 172,523评论 0 370
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 61,181评论 1 302
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 70,189评论 6 401
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 53,642评论 1 316
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 41,993评论 3 431
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 40,977评论 0 280
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 47,527评论 1 326
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 39,547评论 3 347
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 41,661评论 1 355
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 37,250评论 5 351
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,991评论 3 340
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 33,422评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 34,571评论 1 277
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 50,241评论 3 382
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 46,737评论 2 366

推荐阅读更多精彩内容

  • 来自陈浩的一片老文,但绝对营养。 示例工程:3 个头文件*.h,和 8 个 C 文件*.c。 初 编译过程,源文件...
    周筱鲁阅读 4,706评论 0 17
  • makefile关系到整个工程的编译规则,一个工程中的源文件不计其数,按其类型、功能、模块分别放在若干的目录当中,...
    Joe_HUST阅读 1,885评论 0 3
  • 本文章介绍了makefile跟kconfig文件,包括编译过程与makefile编码规则。 编译过程:我们在进行l...
    超低空阅读 17,461评论 0 5
  • 最近两天花时间读了一下陈皓老师的《跟我一起写Makefile》,这篇文章非常地详细地介绍了make的用法以及Mak...
    David栗子阅读 3,463评论 0 3
  • @(linux 编程)[开发技能, 工具使用] What is GNU Make Make 是控制工程中通过源码生...
    orientlu阅读 11,356评论 0 26