linux中的makefile

(码字不易,关注一下吧w~~w)

makefile文件是用来管理项目文件,通过执行make命令,make就会解析并执行makefile文件。

命名:makefile或者Makefile

规则:

目标文件:依赖文件

(tab)命令

第一个版本:

这是新建makefile文件的内容:

依赖文件不用写.h头文件

接下来执行make ,就会生成main文件

缺点:改其中一个文件,就得重新编译

第二个版本:

检查规则:

要想生成目标文件,先检查依赖条件是否都存在:

  若都存在,则比较目标时间和以依赖时间,如果依赖时间比目标时间新,则重新生成目标;否则不重新生成;

  若不存在,则往下找有没有生成依赖的规则,有则生成,没有就报错。

这是makefile文件的内容:

linux中的makefile_第1张图片

执行make命令后:

第二个版本可以消除第一个版本的缺点

原因:

假设add.c更新最新修改时间时

add.o(依赖文件)的时间比add.c(目标文件)的时间晚,就会执行gcc -c add.o add.c命令

紧接着main(依赖文件)的时间比add.o(目标文件)的时间晚,就会执行gcc -o main main.o add.o jian.o命令

第三个版本:

 变量:

         自定义变量:v=hello ,下文中$(v)=hello

          自带变量:CC(gcc),CPPFLAGS( -I  -->头文件所在目录),LDFLAGS(链接器选项  -L -l),CFLAGS(c编译器选项 -wall -g -c)

          (只能用在命令中)自动变量:$@  -->表示规则中的目标

                            $<    -->表示规则中的第一个条件(依赖文件)

                            $^    -->表示规则中所有条件(重复项消除重复项) 

           模式规则:

                           %.o:%.c   -->.o文件依赖与.c文件   %必须一样

通过使用变量的makefile:

linux中的makefile_第2张图片

 执行make:

第四个版本 :

函数:

        1:wildcard 查找指定目录下指定类型的文件

        src=$(wildcard *.c)//找到当前目录下.c文件,赋值给src

        2:patsubst 匹配替换

        obj=$(patsubst %.c,%.o,$(src))//把src变量所有.c文件替换为.o文件

linux中的makefile_第3张图片

执行make:

第五个版本: 

linux中的makefile_第4张图片

 .PHONY:clean

把clean设为为伪命令,clean就不需要依赖了。

第一个出现的目标为终极目标。

make命令就是实现终极目标

make clean 实现 clean

使用-f可以指定makefile名字

make -f mainmak clean 

你可能感兴趣的:(linux,运维,服务器)