make
:
make
是一条计算机指令,是在安装有GNU Make
的计算机上的可执行指令。该指令是读入一个名为makefile
的文件,然后执行这个文件中指定的指令。有时make
又指GNU Make
,GNU Make
是一个用来控制可执行文件和其他一些从源文件来的非源代码文件版本的软件。
Makefile
:
一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,
makefile
定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,也可以执行操作系统的命令。
Makefile
的使用方式的总结,一般为单个项目产生单个可执行文件,一般是控制台程序或者opencv
相关文件目录是:
ProjectName #项目目录
├── Makefile #项目根目录Makefile配置文件
├── main.c #mian方法,include了stack.h
├── stack.h #站结构定义
└── stack.c #栈方法实现
object = main.o stack.o
main : $(object)
gcc -o main $(object)
main.o : main.c
stack.o : stack.h stack.c
.PHONY : clean
clean:
rm $(object)
C++
的项目就需要在main
生成的命令里面把gcc
编译程序换成g++
上述是我的C/C++
多文件编译一般使用的Makefile
编写风格,因为没有特殊的中间文件操作,所以都是用的make
的自动规则,下面解释上面Makefile
内容,基本上可以分成4部分:
在此之前,先说明一下Makefile
基本规则:
基本上按照以下模板:
target ... : dependes ...
command
...
接下来继续讲解
这部分是为了定义包含的链接目标文件
这部分对应的内容是
object = main.o stack.o
此处使用目标名object
包含了main.o
和stack.o
中间文件,这两个文件需要在下一部分中声明其生成方式。
这部分是为了生成最终的可执行文件
这部分对应的内容是
main : $(object)
gcc -o main $(object)
此部分规定了最终的目标文件的生成规则
这部分是声明所有依赖的文件的生成方式,使用了make
的默认生成规则,语法是 目标文件: 依赖的头文件和源文件
这部分对应的内容是
main.o : main.c
stack.o : stack.h stack.c
对应生成的是object
的所有依赖文件
这一步其实可以省略,主要目的是制定一个清理生成的中间文件的选项
这部分对应的内容是
.PHONY : clean
clean:
rm $(object)
.PHONY : clean
是说明clean
是一个伪目标文件,从而不会对clean
使用目标文件的生成。
该部分的主要内容就是rm $(object)
这条命令,它会删除object
的所有依赖的目标文件,如果存在的话。
make
make clean