linux_c 网络开发日记(2)makefile简介

makefile简介

      当然在我们做一个大型开发是不可能一个一个的GCC去,这个时候我们的makefile就派上用场了。
GNU的make能够使整个软件工程的编译、链接只需要一个命令就可以完成。所以程序员必须得会makeflie。
make在执行时,只需要一个名为makefile(Makefile)的文件。makefile文件描述了整个工程的编译,链接等规则。其中包括:工程中的那些源文件需要编译以及如何编译;需要创建那些库文件以及如何让创建这些库文件、最后产生我们想要得到的可执行文件。

makefile规则示例

hello:main.o func1.o func2.o
gcc main.o func.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
规则:用于说明如何产生一个或多个目标文件,规则格式如下:

targets:prerequisities
command
目标依赖
命令   //命令需要以【Tab】键开始//
在makefile中,规则的顺序很重要,因为makefile中只应该有一个最终目标,其他的目标都是这个目标所带出来的,所以一定要让make知道你的最终目标是什么。一般来说,定义在makefile中的目标可能会有很多,但是第一条规则种的目标将被确立为最终目标。

文件名

makefile命令默认在当前目录下寻找名字为makefile 或者Makefile的工程文件,当名字不为这两者之一时,可以使用: make -f 文件名 的命令。

伪目标

makefile中把那些没有任何依赖只有执行动作的目标称为“伪目标(phony targets)”


如上面例子中
.PHONY:clean
clean:
rm -f hello main.o func1.o func2.o
.PHONY”将“clean”目标声明为伪目标

变量

当有大量重复性修改时我们可以使用变量。
例子:
obj=
hello:$(obj)
gcc $(obj) -o hello

在makefile中,存在系统默认的自动化变量
$^:代表所有依赖文件
$@:代表目标
$<:代表第一个依赖文件。
例:
hello:main.o func1.o func2.o
gcc main.o func.o func2.o -o hello
可以改写为:
hello:main.o func1.o func2.o
gcc $^ -o $@

杂项

makefile中“#”字符后的内容被视作注释

hello:main.o func1.o func2.o
@gcc main.o func.o func2.o -o hello

@:取消回显

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