株洲做网站 省心磐石网络,小蘑菇网站建设软件,网站制作建设公司哪家好,wordpress php 链接背景 会不会写makefile#xff0c;从侧面说明了一个人是否具备完成大型工程的能力。一个工程中的源文件不计数#xff0c;其按类型、功能、模块分别放在若干个目录中#xff0c;makefile定义了一系列的规则来指定#xff0c;哪些文件需要先编译#xff0c;哪些文件需要后编…背景 会不会写makefile从侧面说明了一个人是否具备完成大型工程的能力。一个工程中的源文件不计数其按类型、功能、模块分别放在若干个目录中makefile定义了一系列的规则来指定哪些文件需要先编译哪些文件需要后编译哪些文件需要重新编译甚至于进行更复杂的功能操作。makefile带来的好处就是——“自动化编译”一旦写好只需要一个make命令整个工程完全自动编译极大的提高了软件开发的效率。make是一个命令工具是一个解释makefile中指令的工具一般来说大多数的IDE都有这个命令比如Delphi的makeVisual C的nmakeLinux下GNU的make。可见makefile都成为了一种在工程方面的编译方法。make是一条命令makefile是一个文件两个搭配使用完成项目自动化构建。 实例代码
C代码
#include stdio.hint main()
{printf(hello Makefile!\n);return 0;
}
Makefile文件
hello:hello.ogcc -o hello hello.o
hello.o:hello.sgcc -c -o hello.o hello.s
hello.s:hello.igcc -S -o hello.s hello.i
hello.i:hello.cgcc -E -o hello.i hello.c.PHONY:clean
clean:rm -f hello.i hello.s hello.o hello
依赖关系 上面的文件 hello 它依赖 hello.o hello.o 它依赖 hello.s hello.s 它依赖 hello.i hello.i 它依赖 hello.c 依赖方法 gcc -option hello.* hello.* 就是与之对应的依赖关系。
原理
make是如何工作的在默认的方式下也就是我们只输入make命令。那么 make会在当前目录下找名字叫“Makefile”或“makefile”的文件。如果找到它会找文件中的第一个目标文件target在上面的例子中他会找到“hello”这个文件并把这个文件作为最终的目标文件。如果hello文件不存在或是hello所依赖的后面的hello.o文件的文件修改时间要比hello这个文件新可以用 touch 测试那么他就会执行后面所定义的命令来生成hello这个文件。如果hello所依赖的hello.o文件不存在那么make会在当前文件中找目标为hello.o文件的依赖性如果找到则再根据那一个规则生成hello.o文件。这有点像一个堆栈的过程当然你的C文件和H文件是存在的啦于是make会生成hello.o文件然后再用hello.o文件声明make的终极任务执行文件hello。这就是整个make的依赖性make会一层又一层的去找文件的依赖关系直到最终编译出第一个目标文件。在找寻的过程中如果出现错误比如最后被依赖的文件找不到那么make就会直接退出并报错而对于所定义的命令的错误或是编译不成功make根本不理。make只管文件的依赖性即如果在我找了依赖关系之后冒号后面的文件还是不在那么对不起我就不工作啦。 项目清理 工程是需要被清理的像clean这种没有被第一个目标文件直接或间接关联那么它后面所定义的命令将不会被自动执行不过我们可以显示要make执行。即命令——“make clean”以此来清除所有的目标文件以便重新编译。但是一般我们这种clean的目标文件我们将它设置为伪目标用 .PHONY 修饰伪目标的特性是总是被执行的。可以将我们的 hello 目标文件声明成伪目标测试一下。 本文完