1.关于makefile里面的变量
$(CXX) 默认使用g++编译器
2.makeifle中的自动变量
@:规则中的目标文件名^ :所有不重复的依赖文件,以空格分开
3.g++编译选项功能
-g :添加gdb调试选项,在对象文件中生成调试信息
-Wall :运行gcc发出所有有用的警告
-Wextra:打印出更多的警告信息,比开启 -Wall 打印的还多
-std:指定语言标准,只有编译C或C++时才有用,除了c++11,还有c90、c89、c99、iso9899
-pthread: 支持多线程, 使用pthread库
4.makefile一些常用语法
4.1 .PHONY
PHONY 目标并非实际的文件名:只是在显式请求时执行命令的名字。有两种理由需要使用PHONY 目标:避免和同名文件冲突,改善性能。
1)如果编写一个规则,并不产生目标文件,则其命令在每次make 该目标时都执行。
因为"rm"命令并不产生"clean"文件,则每次执行"make clean"的时候,该命令都会执行。如果目录中出现了"clean"文件,则规则失效了:没有依赖文件,文件"clean"始终是最新的,命令永远不会 执行;为避免这个问题,可使用".PHONY"指明该目标。
2)已知phony 目标并非是由其它文件生成的实际文件,make 会跳过隐含规则搜索。这就是声明phony 目标会改善性能的原因,即使你并不担心实际文件存在与否。
clean: //没有.PHONY会出现问题,后面不会执行
rm *.o temp