欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Makefile语法

程序员文章站 2022-07-12 11:28:01
...

综述

大工程编译工具 make
配置文件 Makefile
类似于脚本文件,复杂的流程操作简单化
使用的时候只需要make命令即可完成整个工程的自动编译。

基本语法

1.行首空出来的地方一定要使用“TAB“不要使用空格
2.格式如下:

目标...: 依赖文件集合 
	命令 1
	命令 2
	......
目标...: 依赖文件集合 
	命令 1
	命令 2	

3.注释开头用符号“#”
4.支持变量 = 赋值 $(变量名) 引用

变量均为字符串
= 相当于 地址引用赋值
:= 实体赋值引用
?= 判断赋值 没有赋值的情况下赋值
+= 追加赋值 相当于字符串拼接

Makefile模式规则

一条规则来将所有的.c文件编译为对应的.o文件
%表示长度任意的非空字符串
自动化变量 会把匹配的文件自动取出
[email protected] s< s^ 等

objects = main.o input.o calcu.o
main: $(objects)
 	gcc -o main $(objects)
 %.o : %.c
	gcc -c $< 
 clean:
	 rm *.o
	 rm main

Makefile伪目标

使用伪目标主要是为了避免Makefile中定义的执行命令和目标和工作目录下的实际文件出现名冲突。 声明方式如下:
.PHONY:clean

Makefile条件判断

条件关键字有4个 ifeq ifneq ifdef ifndef

<条件关键字>
	<条件为真时执行的语句>
else
	<条件为假时执行的语句>
endif

Makefile函数

Makefile 中的函数是已经定义好的,直接使用。不支持自定义函数
$(函数名 参数集合) ${函数名 参数集合}

函数 subst

字符串替换 $(subst <from>,<to>,<text>)
把字符串text中的 from内容替换为to

函数patsubst

模式字符串替换 $(patsubst <pattern>,<replacement>,<text>)
e.p : $(patsubst %.c,%.o,a.c b.c c.c)

函数dir

获取目录 $(dir <names…>)
用来从文件名序列names中提取出目录部分,返回值是文件名序列的目录部分e.p:
$(dir </src/a.c>)
提取文件“/src/a.c”的目录部分,也就是“/src”

函数notdir

去除文件目录部分 $(notdir <names…>)
$(notdir </src/a.c>)
提取文件“/src/a.c”中的非目录部分,也就是文件名“a.c”

函数foreach

foreach 函数用来完成循环 $(foreach <var>,<list>,<test>)
把参数list中的单词逐一取出来放到参数var中,然后执行text语句。

函数wildcard

使用通配符% $(wildcard PATTERN…)
比如: $(wildcard *.c) 获取当前目录下所有的.c 文件

上一篇: Makefile语法

下一篇: Makefile语法