Linux项目自动化构建工具-make/Makefile
基础知识:
- 引入makefile的好处:“自动化编译”,为提高软件开发效率
- make是一格命令工具,是一个解释makefile中指令的工具,例如Delphi的make,Visual C++的nmake,Linux下GNU的make。
- make是一条命令,makefile是一个文件。
实例:
Makefile文件:
Makefile文件另一种表示:
mycode.c文件:
依赖关系:
上面的文件:mycode依赖mycode.o
mycode.o依赖mycode.s
mycode.s依赖mycode.i
mycode.i依赖mycode.c
依赖方法:
gcc mycode.* - option mycode.* 与之对应的依赖关系
工作原理:
1. make 会在当前路径下寻找名字叫“Makefle”或“makefile”的文件
2. 如果找到,它会找文件中的第一个目标文件(target),上述实例会找到mycode作为最终的文件
3. 如果hello文件不存在,或是mycode所依赖的后面的mycode.o文件的文件修改时间要比hello这个文件新(可以用 touch 测试),那么,他就会执行后面所定义的命令来生成mycode这个文件。
4. 如果mycode所依赖的mycode.o文件不存在,那么make会在当前文件中找目标为mycode.o文件的依赖性,如果找到则再根据那一个规则生成mycode.o文件。(这有点像一个堆栈的过程)
5. 当然,你的C文件和H文件是存在的啦,于是make会生成 mycode.o 文件,然后再用 mycode.o 文件声明make的终极任务,也就是执行文件mycode了。
6. 这就是整个make的依赖性,make会一层又一层地去找文件的依赖关系,直到最终编译出第一个目标文件。
7. 在找寻的过程中,如果出现错误,比如最后被依赖的文件找不到,那么make就会直接退出,并报错,而对于所定义的命令的错误,或是编译不成功,make根本不理。
8. make只管文件的依赖性,即,如果在我找了依赖关系之后,冒号后面的文件还是不在,那么对不起,我就不工作啦。
make扫描makefile文件时,默认会生成一个目标依赖关系,一般是第一个。如果目标文件没有修改,则不需进行make
如果出现上述问题:**'mycode' is up to date** 进行项目清理,即可解决
项目清理:
利用 make clean实现清理
clean:总是可以被执行的
越努力,越幸运!