Makefile学习(一)

5 篇文章 0 订阅
本文详细介绍了Makefile的基本概念,包括书写规则、工作流程、通配符和自动化变量的使用,以及变量的定义与赋值方法。重点讲解了如何通过目标、依赖和命令来构建编译规则,并探讨了VPATH和vpath在管理文件路径中的应用。此外,还解释了伪目标的概念及其在提升编译效率和避免命名冲突中的作用。
摘要由CSDN通过智能技术生成

Makefile学习(一)

一、makefile书写规则

targets : prerequisites

    command

相关说明如下:

targets:规则的目标,可以是 Object File(一般称它为中间文件),也可以是可执行文件,还可以是一个标签;

prerequisites:是我们的依赖文件,要生成 targets 需要的文件或者是目标。可以是多个,也可以是没有;

command:make 需要执行的命令(任意的 shell 命令)。可以有多条命令,每一条命令占一行。
命令的开始一定要使用Tab键。[^1]

二、makefile工作流程

在我们编译项目文件的时候,默认情况下,make 执行的是 Makefile 中的第一规则(Makefile 中出现的第一个依赖关系),此规则的第一目标称之为“最终目标”或者是“终极目标”。

三、makefile中通配符和自动化变量

通配符:

通配符使用说明
*匹配0个或者是任意个字符
匹配任意一个字符
[]$1

自动化变量:

自动化变量说明
$@表示规则的目标文件名
$%当目标文件是一个静态库文件时,代表静态库的一个成员名
$<规则的第一个依赖的文件名
$?所有比目标文件更新的依赖文件列表,空格分隔
$^代表的是所有依赖文件列表,使用空格分隔
$+类似“$^”,但是它保留了依赖文件中重复出现的文件。主要用在程序链接时库的交叉引用场合
$*模式规则和静态模式规则中,代表“茎”

四、makefile变量的定义与赋值

  OBJ=main.o test.o test1.o test2.o
  test:$(OBJ)    
  gcc -o test $(OBJ)

变量的名称可以由大小写字母、阿拉伯数字和下划线构成。

  1. 简单赋值 ( := ) 编程语言中常规理解的赋值方式,只对当前语句的变量有效。
  2. 递归赋值 ( = ) 赋值语句可能影响多个变量,所有目标变量相关的其他变量都受影响。
  3. 条件赋值 ( ?= ) 如果变量未定义,则使用符号中的值定义变量。如果该变量已经赋值,则该赋值语句无效。
  4. 追加赋值 ( += ) 原变量用空格隔开的方式追加一个新值。

五、makefile路径

VPATH:变量,更具体的说是环境变量,Makefile 中的一种特殊变量,使用时需要指定文件的路径。
vpath:关键字,按照模式搜索,也可以说成是选择搜索。搜索的时候不仅需要加上文件的路径,还需要加上相应限制的条件。

VPATH=src car
test:test.o    
gcc -o $@ $^
vpath test.c src : car
test:test.o 
gcc -o $@ $^

六、makefile伪目标

使用伪目标有两点原因:
1、避免我们的 Makefile 中定义的只执行的命令的目标和工作目录下的实际文件出现名字冲突。
2、提高执行 make 时的效率,特别是对于一个大型的工程来说,提高编译的效率也是我们所必需的。
先声明伪目标,再定义:

.PHONY:clean
clean:   	
	 rm -rf *.o test
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值