makefile简略教程

Posted 清水寺扫地僧

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

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

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

以上是关于makefile简略教程的主要内容,如果未能解决你的问题,请参考以下文章

Git简略教程

dedecms简略标题(副标题)使用方法教程

Makefile文件_总述

Makefile总述

Makefile

makefile简易教程