> 文章列表 > 【Linux】Makefile的简述

【Linux】Makefile的简述

【Linux】Makefile的简述

目录

前言:

一、Makefile的规则

二、Makefile的函数语法

(1)通配符pattern

​(2) 删除clean

​(3) 立即变量、延时变量

(4) Makefile常用函数


3-1.Makefile要达到的效果_哔哩哔哩_bilibili 3-2.Makefile的引入及规则_哔哩哔哩_bilibili

3-3.Makefile的语法_哔哩哔哩_bilibili

前言:

学习的过程中,认知Makefile的作用,了解其基本的语法和规则,看得懂和能够使用通用Makefile来减轻实际项目中的工作量即可。

(1)采用gcc命令对多个.c文件编译时,以下面的为例,它需要依次编译a.c和b.c,如果对其中的文件进行修改,它又得把所有的文件重新编译一遍,这个是没有必要的。

 (2)上面的方式,应对大程序的时候,就非常的不方便。我们修改源文件或头文件时,重新编译牵涉到的文件,就重新生成应用程序---这个是比较高效的编译方式。

(3)应用上面的方式,在Linux中经常使用make命令来编译程序,make命令所执行的动作依赖于MakeFile文件。

(4)Makefile的基本原理:通过比对目标文件和依赖文件的修改时间,判断是否已修改,依赖文件较新时执行相应的动作。 

(5)现有通用Makefile的作用:

  • ①支持多个目录、多层目录、多个文件
  • ②支持给所有文件设置编译选项
  • ③支持给某个目录设置编译选项
  • ④支持给某个文件单独设置编译选项

一、Makefile的规则

当我们执行make命令时,会去寻找当前目录下的Makefile文件,并根据它的指示去执行操作,生成第一个目标。

一个简单的Makefile规则样式如下:

目标(target): 依赖(prerequiries)
<tab>命令(command)
如果“依赖文件”比“目标文件”更加新或者目标文件不存在,那么执行“命令”来重新生成“目标文件”。
具体的样例如下:
当我们修改a.c文件时,重新编译a.c以及重新链接生成相应的程序。

二、Makefile的函数语法

(1)通配符pattern

通配符(pattern):精简相似规则

$@ :表示目标        $<:表示第一个依赖文件        $^:表示所有的依赖文件

test: a.o b.o c.o
        gcc -o test $^

%.o : %.c
        gcc -c -o $@ $<

(2) 删除clean

用于删除目标文件。

 clean:
        rm *.o test

.PHONY: clean

(3) 立即变量、延时变量

A = xxx // 延时变量,使用到时才确定

B ?= xxx // 延时变量,只有第一次定义时赋值才成功;如果曾定义过,此赋值无效
C := xxx // 立即变量,在定义时即确定
D += yyy // 如果 D 在前面是延时变量,那么现在它还是延时变量;

 上面的变量,做个小的测试。

根据上面的阐述,相应的A、B以及C的输出结果如下:

(4) Makefile常用函数

//对于list中每一个元素赋给var,然后把var改为text描述的形式
$(foreach var,list,text)
//pattern所列出的文件是否存在,把存在的文件都列出来
$(wildcard pattern)
//在text中取出符合(不符合)pattern格式的值
$(filter pattern...,text)
$(filter-out pattern...,text)
//寻找text中符合pattern格式的字,用replacement替换它们
$(patsubst pattern,replacement,text)

上面的函数做个小的测试应用。

相应的结果: