make与Makefile
make与Makefile介绍
一. 介绍make/Makefile
从本质上来说,make是一个命令而Makefile是一个文件。也就是说在Makefile文件中写出依赖关系中的目标文件和依赖关系列表,并写出你想要的操作的指令,这样就可以通过make指令直接执行Makefile文件中的所写的命令行,所以当需要多次调用一种语句的时候,就可以将这个语句写道Makefile文件中,此时只需要在命令行中写入make就可以直接执行,大大提高了效率,那么说了他们的好处,接下来就具体的来说说Makefile如何创建。
二. 创建Makefile
- 首先我们要先创建一个名叫Makefile的文件如下:
- 之后我们对Makefile文件进行编写如下:
如上图表示Mytest所代表的就是目标文件,test.c表示的是依赖关系列表,此时Mytest:test.c这个语句表示的就是Mytest文件依赖test.c文件,也就是说Mytest依靠test.c来实现,如何实现呢,就是按照下面的语句进行实现。此时按enter键换行,之后记住还要按TAB键,一定要按TAB键进行向后移动,不能通过空格来相后移动,这样会出现错误的。之后写下依赖方法,也就是执行test.c并附名为Mytest,此时一个Makefile的依赖文件就写好了。之后保存退出。 - 执行make指令
此时由上图可以看到,使用make指令就执行了依赖方法的语句,从而会生成Mytest
之后运行Mytest就会执行test.c中的语句如下:
创建伪目标文件
一. 创建伪目标语句
在Makefile中,伪目标其实并不是一个文件,只是一个标签,所以make无法生成它的依赖关系和决定它是否要执行。我们只有通过显示地指明这个“目标”才能让其生效。通过使用.PHONY用来指明伪目标,像make说明,当前文件是伪目标,具体声明如下:
由上图可知,我们定义的伪目标为clean,此时不需要写依赖列表,而我们的依赖方法就是删除我们新生成的Mytest,实施截图如下:
此时执行依赖方法的语句之后可以看到Mytest就被我们删除了。
二. 伪目标的特征
伪目标的依赖方法总是被执行的,也就是说当前的方法不仅仅只是执行一次,可以被使用无处次,可以一直调用执行,而如果不是为目标文件就只能被调用一次,而不是无数次。如下:
此时调用的就不是伪目标,此时只能调用一次,第二次调用就失败了。
此时伪目标文件就可一直被调用,而不会产生报错。
Makefile文件中的符号
一. $@
此符号表示的是所对应的是依赖关系中的目标文件如:
二. $^
该符号表示的是依赖关系中的依赖文件列表也就是对应的下面语句中的test.c。如下:
三. $<
该符号表示的是依赖关系中的一个个依赖文件如下: