1.make和makefile的区别
make是指令,makefile是文件,这是两者的却别。两者搭配使用,完成项目自动化创建。
2.make原理
make是如何工作的,也就是在默认情况下,我们只输入make命令,那么
1.make会在当前目录下寻找叫makefile或Makefile的文件,如果找到,则会执行其目标文件,进行工作,如果没有找到,或者找到的目标源文件没有被更新,就是目标文件已经被生成为可执行文件的情况下,源文件没有更新。他就会执行后面所定义的命令来生成文件。
2.如果源文件所依赖的目标文件不存在,那么make会在当前文件找寻目标为.o文件的依赖性,如果找到,则根据找到的文件生成可执行文件。(这一过程有点像堆栈过程)。
3.make会一层一层的去找文件的依赖性,知道编译出第一个文件目标。
4.在找寻的过程中,如果出现错误,比如最后被依赖的文件找不到,那么make就会直接退出,并报错,而对于所定义的命令的错误,或是编译不成功,make根本不理。make只管文件的依赖性,即,如果在我找了依赖关系之后,冒号后面的文件还是不在,那么对不起,我就不工作啦。
3.make和makefile的使用
看代码:C++代码
1 #include <iostream>
2 using namespace std;
3 int main()
4 {
5 for(int i=0;i<10;i++)
6 {
7 cout<<"Hello Linux"<<endl;
8 }
9 return 0;
10 }
makefile文件的代码
1 text :text.cpp
2 g++ -o text text.cpp
3 .PHONY:clean
4 clear:
5 rm -rf text
这样就可以直接生成可执行文件,直接执行一个工程文件。比如上面代码的结果:
[SSS@iZbp157c5bomu42m2cyllwZ ~]$ make
make: `text' is up to date.
[SSS@iZbp157c5bomu42m2cyllwZ ~]$ make clear
rm -rf text
4.项目清理
1.工程师需要被清理的
2.像clear这样,如果没有被第一个文件直接或间接关联,那么她所定义的文件不会被执行,只有使用make clear指令才能清理目标文件,以便重新编译。
3.所以,我们一般将clear这样的命令设置为伪目标,以便每次都执行,用PHONY来修饰。
5.关于makefile的的特殊符号的应用
1 text :text.cpp
2 @g++ -o $@ $^ //最前面的@代表不显示make之后的结果,后面的$@代表第一行:左边的生成文件,¥^代表:右边的内容
3 .PHONY:clean
4 clear:
5 @rm -rf text
结果如下:
所以,使用特殊符号可以简化内容