Makefile常用规则

1.Makefile中的内部参数


$@  表示目标文件
$^  表示所有的依赖文件
$<  表示第一个依赖文件
$?  表示比目标还要新的依赖文件列表
$+  同样表示所有依赖目标的集合(不去除重复的依赖目标)

2.调用变量

Makefile变量使用 ( ) {}来调用,如果是shell变量,则需要使用$$来引用。

一种变量替换方法:


src := a.c b.c
obj := $(src:%.o=%.c)

变量赋值方法:


=   基本的赋值
:=  覆盖之前的值
?=    是如果没有被赋值过就赋予等号后面的值(一般可用来设置默认值)
+=   追加变量

这里需要注意=和:=的区别,:=赋值是从它在Makefile中的位置处开始生效的,在它之前的变量还保持原有值,而=会以最后一个赋值为准,并且之前的引用也会被更新。

所以如果定义的变量是在Makfile中会变化的,一定要使用:=。

3.通配符

需要注意:Makefile 中通配符%表示所有的字符,不要和shell语法告混淆,shell 中通配符*表示所有的字符

4.调用shell命令

  • 使用$(shell …)格式来调用shell命令

  • 多个命令连续执行需要以\连接,因为Makefile执行shell是按行执行


SUBDIR=src example

all:

    @for subdir in $(SUBDIR); \

    do\

        echo "building "; \

    done

这里在shell命令前加@符号,主要目的是不让条命令显示在makefile中的编译log中。

  • 以`符号来执行,比如:PATH=`pwd`

5.函数

函数调用方式:

例如:$(wildcard *.c),常用函数如下:

wildcard : 扩展通配符
notdir : 去除路径
patsubst :替换通配符
strip: 去空格
filter: 过滤
filter_out:反过滤
addprefix:加前缀
addsuffix:加后缀

猜你喜欢

转载自blog.csdn.net/rikeyone/article/details/81217870