2017年4月27日星期四

make and Makefile





<br /> make & Makefile!<br />




make及makefile



make命令简介:

要使用make,首先需要写一个makefile文件. 描述了软件包中各文件的关系,提供更新每个文件的命令。

如:

gcc module1.o module2.o -o exel

可以这样写Makefile文件:

exel:module1.o module2.o
    gcc module1.o module2.o -o exel

复杂化为:

module1.0:module1.c module1.h
    gcc -c moduel1.c

Makefile文件的格式如下:

目标:依赖项列表
    【命令】

#表示注释,\作为后接换行符来换行


命令行首需要空格,为一个制表位。

Makefile文件推荐首字母大写,安放在源程序相同的目录下。

shell使用make命令时,默认对Makefile第一行目标进行维护。层层递进。

make程序也可以指定要维护的目标:

make module1.o

也可以制定自己取名字的Makefile:

make -f filename









Makefile中的环境变量:

用条件语句把前面的Makefile重写一遍:

OBJS=module1.o module2.o
C=-c
exel:$(OBJS)
    gcc $(OBJS) -o exel
module1.o:module1.c module1.h
    gcc C mdoule1.c

某些默认变量具有特殊含义。参看

博客

.







伪目标

Makefile文件中存在这种情况:有的目标存在只是为了形成一条规则。

如:

all:exel1 exel2 exel3

作用:

可以维护全部exel

如:

clean:rm -f exe*

作用:

中间文件清理







条件语句

主要三个关键字:ifeq, else, endif

ifeq( $(VAR), 1)
    gcc -o exe1 module
else
    gcc -o exe2 module
endif







调试make

通过-d选项打印调试信息。







进阶


Makefile隐含规则的书写