Makefile基础知识

文章目录

  • 一、常用基本符号
    • 1.1 常用基本符号
    • 1.2 常用路径
    • 1.3 常用make默认变量
  • 二、常用符号释义与实例
    • 2.1 $@ 和 $^
    • 2.2 $<
    • 2.3 %
    • 2.4 $(@:xxx=)
  • 三、:= += ?=测试
    • 3.1 :=(重新赋值)

一、常用基本符号

1.1 常用基本符号

常用符号表达式 含义
$ 获取变量值($后紧跟变量,如$(PATH))
$@ 目标文件【也可以加上括号:$(@)】
$^ 所有依赖文件
$< 第一个依赖文件
  $? 更新过的依赖文件
$() 获取Makefile中定义的变量的值
% 和 * 均为通配符,表示“全部的xxx”,如:%.c或*.c,表示所有.c文件。
但是:
【 % 】为make语法规则通配符,在任何时候都表示“全部”的意思
【 * 】在变量定义或者函数调用时,该通配符会失效,需要搭配函数wildcard函数使用
.phony
clean 伪目标:可以使用make clean执行该目标后面的语句
= 延时赋值
即:变量使用的时候才会对其赋值

备注:make会将整个makefile全部展开完毕以后才决定对该变量赋什么值)
:= 立即重新赋值(备注:会清空之前的值)
+= 追加赋值
?= 没有定义则赋值(备注:该操作符为也为延时赋值操作符的一种)

1.2 常用路径

  • 备注:
    Makefile中要调用shell命令的话,需要用到特殊语法,即命令前面加上shell。否则Makefile并不知道这是shell命令。
    格式为:
    $(shell xxx)
常用路径表达式 含义
$(shell pwd) 获取绝对路径。如 INCDIR:=$(shell pwd)

1.3 常用make默认变量

默认变量 含义
$(MAKE) make命令本身
$(CC) cc
$(CXX) g++
$(AR) ar
$(RM) rm -rf
$(CXXFLAGS)
$(CFLAGS)
$(ARFLAGS) rv

二、常用符号释义与实例

2.1 $@ 和 $^

test.o : test.c test.h head.h
    gcc -o $@ $^
其中:
$@:表示test.o
$^:表示test.c test.h head.h这三个文件

2.2 $<

test.o : test.c
    gcc -o $@ $<
其中
$@:同上
$<:表示test.c

2.3 %

all: test1.o test2.o

%.o : %.c
    gcc -o $@ $<
其中:
注意1、Makefile规则是找第一个没有通配符的规则,也就是会找到all,发现有两个依赖,
注意2、那么看到这个%,就会在all那个规则中查找依赖文件,并逐次匹配,一次匹配一个,如:
(1)第一次匹配到test1.o,则%就表示test1,那么对应%.c就是test1.c
(2)第二次匹配到test2.o,则%就表示test2,那么对应%.c就是test2.c
(3)逐次匹配,直到匹配完最后一个依赖文件为止

2.4 $(@:xxx=)

(1)$@表示目标文件,
(2)= 表示用等号右边的字符串替换左边的字符串
如:

smdk2410_config : unconfig
    $(@:_config=)      #等号右边没东西,表示将smdk2410_config中的_config替换为空

上述代码替换完之后,会变成:(可以用echo命令打印试试)

smdk2410 : unconfig

三、:= += ?=测试

3.1 :=(重新赋值)

1、编写一个makefile代码如下:
Makefile基础知识_第1张图片
2、测试结果:
Makefile基础知识_第2张图片

可以看到x已经被重新赋值为Last_了,而y中的x还是之前的x

你可能感兴趣的:(Makefile)