makefile简略教程

makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。

make命令执行时,需要一个 Makefile 文件,以告诉make命令需要怎么样的去编译和链接程序。

工程有若干个C文件和头文件,需要写一个Makefile来告诉make命令如何编译和链接这几个文件。规则是:
1)如果这个工程没有编译过,那么我们的所有C文件都要编译并被链接。
2)如果这个工程的某几个C文件被修改,那么我们只编译被修改的C文件,并链接目标程序。
3)如果这个工程的头文件被改变了,那么我们需要编译引用了这几个头文件的C文件,并链接目标程序。


以下是 makefile / Makefile (只能这两种写法) 的简要用法:

1个规则

目标 : 依赖条件                 target ... : prerequisites ...
(一个tab缩进)命令            		command

1. 目标的时间必须晚于依赖条件的时间,否则就更新目标;
2. 依赖条件如果不存在,找寻新的规则去产生依赖条件;

2个函数

src = $(wildcard ./*.c)	匹配当前工作目录下的所有.c文件。将文件名组成列表,赋值给变量 src.
# src = add.c sub.c div1.c

obj = $(patsubst %.c, $.o, $(src)) 将参数3中,包含参数1的部分,替换为参数2.
# obj = add.o sub.o div1.o

clean :  没有依赖,作为标签label
	-rm -rf $(obj) a.out   
	"-"左右时删除不存在的文件时,不报错,且顺序执行结束,也即是也许某些文件出现问题,但不要管,继续做后面的事。

3个自动变量

$@:在规则的命令中,表示规则中的目标;
$^:在规则的命令中,表示所有依赖条件;
$<:在规则的命令中,表示第一个依赖条件。如果将该变量应用在模式规则中,它可将依赖条件列表中的依赖一次取出,套用模式规则。

模式规则:
	%.o:%.c
		gcc -c $< -o %@
		
静态模式规则:
	<targets ...>: <target-pattern>: <prereq-patterns ...>
            <commands>
            ...
    targets定义了一系列的目标文件,可以有通配符。是目标的一个集合。
    target-parrtern是指明了targets的模式,也就是的目标集模式。
    prereq-parrterns是目标的依赖模式,它对target-parrtern形成的模式再进行一次依赖目标的定义。
    
    e.g.:
	$(obj):%.o:%.c
		gcc -c $< -o %@
	
伪目标:
	.PHONY: clean ALL

以下内容作为拓展,今后再看,转自陈皓的博客,专栏见:编程语言

以下是整理的他的系列博客,可供参考,特别是以例子进行讲解很形象:

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值