您的位置:首页 > 理论基础 > 计算机网络

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

2015-07-27 16:57 513 查看

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

@:取消回显
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: