Makefile语法

综述

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

基本语法

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

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

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

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

Makefile模式规则

一条规则来将所有的.c文件编译为对应的.o文件
%表示长度任意的非空字符串
自动化变量 会把匹配的文件自动取出
有 s@ 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 文件

### 回答1: Makefile 是用于自动化编译程序的工具,它使用一种名为“规则”的方式来描述源文件和目标文件之间的依赖关系,然后根据这些规则自动编译程序。 Makefile 通常包括以下几个部分: 1. 变量定义:定义需要的变量,如编译器、编译选项等。 2. 目标文件:定义需要编译的目标文件、依赖文件和编译规则。 3. 伪目标:定义一些伪目标,如 clean、install 等。 下面是 Makefile语法: 1. 变量定义: 变量定义的语法格式为: ``` 变量名 = 变量值 ``` 例如: ``` CC = gcc CFLAGS = -Wall -O2 ``` 2. 目标文件: 目标文件的格式为: ``` 目标文件: 依赖文件 编译规则 ``` 例如: ``` main.o: main.c $(CC) $(CFLAGS) -c main.c -o main.o ``` 其中: - 目标文件是 main.o。 - 依赖文件是 main.c。 - 编译规则是 $(CC) $(CFLAGS) -c main.c -o main.o,表示使用 gcc 编译器和编译选项将 main.c 编译成 main.o。 3. 伪目标: 伪目标的格式为: ``` 伪目标: 命令 ``` 例如: ``` clean: rm -rf *.o ``` 其中: - 伪目标是 clean。 - 命令是 rm -rf *.o,表示删除所有的 .o 文件。 这些是 Makefile 的基本语法,你可以根据需要添加更多的规则来实现自动化编译。 ### 回答2: Makefile是用于自动化构建和管理软件项目的一种脚本语言,它描述了软件项目中的文件依赖关系和构建规则。Makefile文件通常包含一系列规则和命令。 Makefile的基本语法包括: 1.目标(Target):由一组规则组成,表示一个或多个文件的生成或操作。目标的命名可以是任意合法的文件名。 2.依赖(Prerequisites):目标所依赖的文件或目标。依赖可以是文件、目录或其他目标。当依赖发生变化时,相应的目标将重新生成。 3.命令(Command):规则中执行的命令。命令必须以Tab键开头,并且可以有多条。 4.规则(Rule):目标、依赖和命令的组合。规则表示了如何生成目标文件或执行一系列操作。 5.变量(Variables):用于存储常用的值或字符串,以便在Makefile中重复使用。变量以$符号开头,并用括号括起来。 6.条件判断(Conditionals):用于根据特定条件选择不同的规则或命令执行路径。条件判断以ifeq、ifneq等关键字开头。 7.循环(Loops):可以在Makefile中使用循环语句,例如foreach、while等,用于重复执行特定的操作。 Makefile的执行过程是根据文件的依赖关系来决定哪些目标需要重新生成。当执行make命令时,Makefile会被解析,并根据依赖关系构建目标文件,如果目标文件已经存在且依赖没有发生变化,则不会重新生成。 Makefile的优点是可以自动化构建过程、减少重复操作、提高项目的可维护性和可靠性。它可以根据项目的需要灵活定义构建规则,并自动处理文件间的依赖关系,大大简化了项目的管理工作和构建过程。 ### 回答3: makefile是一种用于构建和管理软件项目的工具,它使用明确的规则来指导编译和链接操作。它通常用于编译C/C++等编程语言的项目。 makefile的基本语法包含了规则、变量和命令。 规则是makefile的核心,它由目标、依赖和命令组成。目标是需要生成的文件,依赖是生成目标所依赖的文件或其他目标,命令是生成目标的具体操作。规则的格式如下: ``` 目标: 依赖 [tab] 命令 ``` 变量在makefile中用于保存常用的路径、编译选项等信息。可以通过变量的引用来简化makefile的书写和维护。变量的定义使用等号(=)来完成,如: ``` 变量名 = 值 ``` 命令是makefile中的具体操作步骤,用于生成目标。每条命令都必须以一个制表符(tab)开头,否则会被当作普通文本处理。 makefile还有一些常用的指令,如clean、all等。clean指令用于清理编译生成的目标文件和可执行文件,all指令用于编译所有文件。 makefile的优势在于可以自动判断哪些文件需要重新编译,从而提高了构建效率。它可以根据文件的修改时间和依赖关系来确定需要重新编译的文件,并只编译这些文件,避免了不必要的重复操作。 总之,makefile是一种强大的构建工具,它以简洁的语法和智能的依赖关系判断,能够实现高效的软件构建和管理。但需要注意的是,makefile语法在不同的平台和编译器上可能会有一些差异,需要根据具体情况进行调整和学习。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值