一、明白使用makefile的原因
有时候我们在写命令的时候要写很多命令,有一些命令还是重复的命令,我们只需要把这些命令和依赖关系弄明白,把这些常用的命令写进makefile里面就可以了。
二、make的原理
注意:我们有时候写了几组命令并且期待他们能够全部运行,但是make工作的时候先找第一个依赖目标。然后找第一个目标的依赖关系,如果完成了之后就不会再进行了。
所以我们要用一种方法把他们两个联系起来,一般是用all:来当第一个目标,跟两个建立依赖关系,这样就能执行到第二个目标libmath56
三、使用makefile的用法
注意一些格式:冒号前面是想生成的文件,冒号后面的是它所依赖的文件,就是从哪个文件才能变过来,然后找到之后回车按一下tab键继续输入命令。
我这里面写的clean是为了清除临时文件,这些临时文件可能会影响编译活动。还有那*.o的意识是通配符的意思。
下面我再举一个例子来看清除他的依赖关系是怎么样的,我先把.c文件变成.o,再把.o的文件变成可执行文件。
可以看出来我先写的第一句,hello是依赖于.o的,但是文件里面没有.o文件,所以它暂时不执行,到了第二句hello.o是依赖于.c的,他就执行,然后再回去执行第一句。
可以看出我的文件夹里面出来了.o和可执行文件。
注意的事项
(1)关于头文件的引用,有时候在makefile文件中写代码make 的时候会发现缺少头文件,这时候就需要用-I来指定头文件的路径
还要注意gcc命令后面是不能加空格的。
(2)有时候会出现一些错误,比如下面的错误
这是跟make的机制有关系的,make工具在使用的时候会看看文件是不是有修改的地方,如果没有修改的话它是不会去重新编译的。
(3)一个依赖关系下面可以有多行命令,命令之间是可以用&&来连接的。
但是注意cd命令只能管一行命令,如果另起一行要重新写cd,如果加上一个反斜杠/ 的话,续行符是可以转到下一行直接写代码,不需要再加一个tab键。
(4)
四、Makefile中变量的使用
(1)环境变量:装在操作系统上,如果电脑装的应用想使用一个共同变量就从环境变量里面找。
(2)变量的应用:(下面这个图开头代替gcc的变量是CC)
我们可以看出变量可以代替文件的路径,gcc和g++等命令,文件类型,库文件,这样的好处就是到时候直接修改变量的值就行了。
(如果库文件在根目录下面有的话,就不用写-L(指定搜索路径)了)
注意:讲一下通配符:
这个意思就是所遇哦*.o的文件生成一个test文件。
五、安装
install表示安装,意思就装到bin文件夹中,bin文件夹中都是可执行文件,也就是说我们可以自己创造命令,到时候直接调用就行了,这就是安装。
它表示所有的.o文件依赖于.c文件,$表示依赖关系的第一个文件,
这两种写法一样,INCLUDE是变量。
七、在makefile中可以调用头文件。