又一次的学习了下mkaefile
makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。
makefile文件的基本构成:
makefile的基本单元是规则。格式如下:
目标文件列表 分割符 依赖文件列表 [;命令]
[命令]
[命令]
需要注意的是:如果某一行是命令,那么需要以一个Tab开头。另外,如果某一行以Tab开头,则make默认这行为一行命令。
这里简单的书写一个makefile文件作为例子:
#make file start
#CC = gcc 默认CC为gcc
#CXX = g++ 默认CXX为g++
all : 1 20
.PHONY: all
1 : 1.o
$(CC) -o 1 1.o
1.o : 1.c
$(CC) -c 1.c
20 : 20.cpp
$(CXX) -o 20 20.cpp
.PHONY: clean
clean:
-rm -f *.o 1 20
|
这里在当前目录下有两个文件:1.c 20.cpp
在Makefile文件里以#开头的为注释行
在make下有预定义的一些变量,例如CC和CXX,他们俩分别代表gcc和g++
在命令行里需要引用这些变量的话就这样引用:$(CC)
这里的.PHONY(属于特殊目标)的所有依赖被作为伪目标:就是当使用make命令指定次目标时,这个目标所在规则中的命令无论是否存在都会被无条件的执行。
这里的特殊目标还有很多,在实际应用时再查相关的手册。
在makefile中有许多预定义的变量,例如:CC,CFLAGS,MAKE,MAKEFLAGS,SHELL,PWD等。。。
还有一些自动变量$@, $?, $<, $*, $<, $^, $+
$@:表示一个规则中目标文件名。
$%:当规则的目标文件是一个静态库文件时,$%代表库的一个成员名。
$<:规则中的第一个依赖文件名。
$>:和$%一样也只适用于库文件,他的值是库名
$?:所有比目标文件新的依赖文件列表,以空格分隔
$^:规则的所有依赖文件列表,使用空格分隔
$*:他的值是目标文件去掉后缀后的名称。
参考文献:
makefile是一个管理工程文件的强大工具,希望感兴趣的一起学习。
本人邮箱:qiaozqjhsy@gmail.com
阅读(1624) | 评论(0) | 转发(0) |