一.GNU make
linux程序员必须学会使用GNU make来构建和管理自己的软件工程。GNU的make能够使
整个软件工程的编译,链接只需要一个命令就可以完成。
二.Makefile
make在执行时,需要一个命名为Makefile的文件。Makefile文件描述了整个工程的编译,
连接的规则。其中包括:工程中的哪些源文件需要编译以及如何编译;需要创建那些库文件
以及如何创建这些库文件,如何最后产生我们想要的可执行文件。
hello: hello.c
gcc -o hello hello.c
clean:
rm -f hello
三.Makefile规则
一个简单的Makefile文件包含一系列的“规则”,其样式如下:
目标(target)...:依赖(prerequiries)...
< tab > 命令(command)
目标(target)通常是要生成的文件的名称,可以是可执行文件或oBJ文件,也可以是一个执行的动作名称,诸如"clean".
依赖是用来产生目标的材料(比如源代码),一个目标经常有几个依赖。
命令是生成目标时执行的动作,一个规则可以含有几个命令,每个命令占一行。
四.Makefile里面的赋值方法
lmmediate = deferred
lmmediate ?= deferred
lmmediate := deferred
lmmediate += deferred or immediate
define immediate
deferred
endef
在GNU make中对变量的赋值有两种方式:延时变量和立即变量。前者在这个变量使用时才扩展开,后者在定义时它的值就已经确定。使用"=","?="定义或使用define指令定义的变量是延时变量。使用":="定义的变量是立即变量。
五.例子
hello:main.o func1.o func2.o
gcc main.o func1.o func2.o -o hello
main.o:main.c
gcc -c main.c
func1.o:func1.c
gcc -c func1.c
func2.o:func2.c
gcc -c func2.c
.PHONY :clean
clean:
rm -f hello main.o func1.o func2.o
/*---------------------
".PHONY"将"clean"目标声明为伪目标。
--------------------------*/
六:目标
在Makefile中,规则的顺序很重要,因为,Makefile中应该只有一个最终
目标。定义在Makefile中的目标可能会有很多,但是第一条规则中的
目标将确定为最终目标。
阅读(747) | 评论(0) | 转发(0) |