make是Linux中用来维护程序模块关系和生成可执行程序的工具,有了make命令和Makefile文件,整个项目的源文件可以自动的编译,极大程度的提高了软件的开发效率。从windows中转到Linux确实不太适应,但是习惯就好,下面简单介绍一下make的使用及Makefile的编写。
make从Makefile中获取模块间的依赖关系,使用Makefile中的命令对过时的文件进行编译。
1 Makefile的基本构成
目标文件列表 分隔符 依赖文件列表 [;命令]
[命令]
[命令]
main:main.o module1.o module2.o ;gcc main.o module1.o module2.o -o main
或者
main:main.o module1.o module2.o
gcc main.o module1.o module2.o -o main
注意命令这一行一定要以Tab键开头
2 make是如何解释执行Makefile的
Makefile文件:
main:main.o module1.o module2.o
gcc main.o module1.o module2.o -o main
main.o:main.c head1.h head2.h common_head.h
gcc -c main.c
module1.o:modue1.c head1.h
gcc -c module1.c
module2.o:modue2.c head2.h
gcc -c module2.c
#This is a Makefile
从目标文件找依赖文件,首先找到目标文件main的依赖文件开始,发现没有,然后找到目标文件main.o、module1.o、module2.o的依赖文件都存在,生成这三个目标文件,然后回溯到第一行发现目标文件main的依赖文件都存在,用后面的命令gcc main.o module1.o module2.o -o main生成main。
#This is a Makefile这一行是注释,不执行。
当修改某一个文件后执行make,他会比较目标文件和依赖文件的时间先后,如果依赖文件比较新就重新生成,并检查所有相关的目标文件与依赖文件的时间判断是否需要重新生成。
3 其他说明
如果一行过长可以在这一行末尾输入一个反斜杠(\),由反斜杠连接的多行被当作一行对待。反斜杠与新的一行之间不要有空白。
使用下面的方式告诉make使用哪个Makefile
make -f othername
make --file=othername
通常make把Makefile中的第一个规则中的目标当成最终目标。如果第一条规则中有多个目标文件,则把第一个当为最终目标,通常最终目标就是最后要编译成的可执行文件。其他规则中的文件都是为了生成目标文件所产生的中间文件。