GNU/Linux - make 60s介绍
Learn make in 60 seconds.
A programmer needs a build system.
想想你要手动输入编译命令编译每一个源文件,而且要正确添加和管理各个option,是很麻烦的。有各种用来帮助你build的工具,比如ant、make、maven、rake等。Make就是最通用的一种。
Basics of make in 60s!
使用make工具,需要借助Makefile,就是用来描述如何build你的程序的文本文件。
Make工具实际上主要关于Dependencies 和 rules。
比如你要编写和编译一个Hello.c的源文件,正常需要:
gcc -o hello hello.c
使用Makefile文件:(注意第二行开头是tab键) (我的环境下,makefile文件名也可以用)
hello:hello.c
gcc -o hello hello.c
第一行顶格写是一个rule,第一个是要生成的target的文件名,冒号后面是文件名,表示依赖于hello.c文件。
然后在下面添加命令,用来进行编译操作。
运行make命令:
$ make hello
gcc -o hello hello.c
make命令会检查hello.c文件是否变化,即比二进制文件hello还新,来决定是否执行这个rule,即下面的编译操作,来生成二进制文件。
如果没有makefile,也可以执行make,默认操作是使用cc进行编译和参数同名的源文件:
$ make hello
cc hello.c -o hello
可以在dependency list中添加更多的源文件,也可以添加更多的rule,可以创建一个名为all的任务, 一般作为默认存在的任务,来执行所有rule。
all:hello
hello:hello.c test.c
gcc -o hello hello.c
test.o: test.c
gcc -c test.c -o test.o
一个好主意是,使用变量来表示后面可能会改变的东西,比如CC代表编译命令。
并添加一个clean的rule,来删除所有的生成文件。
CC=clang
all:hello
hello:hello.c test.c
$(CC) -o hello hello.c
test.o: test.c
$(CC) -c test.c -o test.o
clean:
rm hello test.o
$ make clean
$ make all