Linux系统C语言--makefile1

make: Makefile或makefile文件

make -f othername

make --file=othername     这两个命令使用其他名字的文件make

 

makefile写法:

target: components[;rule]

<TAB>rule

说明:target依赖于components,其生成规则定义于rule。components中有一个文件比target新,rule就执行

 

例如:

main: main.o

    gcc -o $@ $^

..c.o:

    gcc -o $<

说明:以上后三行是隐含规则。只不过隐含规则里是CC,首先要CC=gcc

两条隐含规则:

$(CC) $(CFLAGS) $@ $<

$(CC) -c $< $@

 

1).PHONY:clean

   clean:

       -rm -f *.o

说明:.PHONY说明clean是伪目标文件

 

2)include filename  把别的makefile文件包含进来,使用空格分隔

 

3)例子:

objects=foo.o far.o

all: $(objects)

$(objects): %.c

    $(CC) -c $(CFLAGS) $< -o $@

说明:$(objects)表示变量;

%用来匹配0个或若干个字符

 

4)-  如执行本命令有错误,继续执行不退出

 本命令始终被执行

 执行本命令不打印本命令内容

 

5)makefile中第一个目标文件为终极目标

 

6)多个文件使用同一个头文件的简单写法:

module1.o module2.o module3.o: head.h

 

7)vpath %.h ../headers    空格或:分隔,指定头文件位置

或者使用VPATH=……

vpath   清除所有

vpath<pattern>  清楚该模式

 

8)\续行,但是\与新的一行之间不能有空白符

 

9)根据隐含规则,以下等价

a)module1.o: head1.h

b) mudule1.o: module1.c head1.h

       gcc -c module1.c -o module1.o

 

10)变量名 赋值符 变量值

赋值符包括:

=

:=  定义时展开

?=  没有值则赋值

+=  追加

 

11)预定义变量: CC  CFLAGS  PWD

 

12)自动变量:

$^  所有依赖文件名

$<  第一个依赖文件名

$@  目标文件名 

$*  目标文件去后缀名

$?  比目标文件新的依赖文件列表

 

这些只能出现在命令里,出现在文件列表里为$$^之类

 

13)ifeq   ifneq  ifdef  ifndef

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章