Makefile中的一些符号介绍

1. Makefile中:=, =, ?=和+=

“=”是最普通的等号,在Makefile中也是最容易搞错的赋值等号,使用“=”进行赋值,变量的值是整个makefile中最后被指定的值

举例如下:

x = A
y = $(x) B
x = AA

经过上面的赋值后,最后y的值是AA B,而不是A B。make会将整个makefile展开后,再决定变量的值。也就是说,变量的值将会是整个makefile中最后被指定的值。

“:=”表示直接赋值,赋予当前位置的值,变量的值决定于它在makefile中的位置,而不是整个makefile展开后的最终值。

举例如下:

x := A
y := $(x) B
x := AA

经过上面的赋值后,最后y的值是A B,即根据当前位置进行赋值。相比于"=",":="才是真正意义上的直接赋值。

"?="表示如果该变量没有被赋值,则赋予等号后的值

x ?= A

如果x在之前没有被赋值,那么x的值就为A

x = B
x ?= A

这种情况下,x的值就是B

“+=”和我们平时写代码的理解是一样的,表示将等号后面的值添加到前面的变量上

x = A
x += B

x的值是A B

2. Makefile中$^,$@,$?和$<

$^ 表示所有的依赖文件,以空格分隔。如果依赖文件中有重复,那么这个变量会去除重复文件,只保留一份

$@ 表示目标文件

$< 表示第一个依赖文件
$? 表示比目标还要新的依赖文件列表

举例如下,目录中有这些文件

$ ls
hello.c  world.c  main.c  Makefile

Makefile文件如下:

main: main.o hello.o world.o
        gcc -o main main.o hello.o world.o

main.o: main.c
        cc -c main.c

hello.o: hello.c
        cc -c hello.c

world.o: world.c
        cc -c world.c

clean:
        rm *.o
        rm main

 改为用上述符号进行替代后,Makefile文件如下:

main: main.o hello.o world.o
        gcc -o $@ $^
main.o: main.c
        cc -c $<
hello.o: hello.c
        cc -c $<
world.o: world.c
        cc -c $<
clean:
        rm *.o
        rm main

下面的命令表示把有更新的依赖文件重新打包到库lib中, 如果只有hello.o更新,则$?代表hello.o, 如果hello.o world.o都有更新,则$?代表hello.o world.o的集合。

lib : main.o hello.o world.o

ar r lib $?

 

  • 7
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
对“info make”的翻译整理,不是一个纯粹的语言翻译版本,其对GNU make的一些语法和用法进行了一些详细分析和说明,也加入了一些个人的观点和实践总结。 本书的所有的例子都可以在支持V3.8版本的GNU make的系统正确执行。 文于册 伪目标 强制目标(没有命令或依赖的规则) 空目标文件 的特殊目标 多目标 多规则目标 静态模式 静态模式规则的语法 静态模式和隐含规则 双冒号规则 自动产生依赖 第五章:规则的命令 为规则书写命令 命令回显 命令的执行 并发执行命令 命令执行的错误 断的执行 的递归执行 变量 变量和递归 命令行选项和递归 选项 定义命令包 第六章 的变量 使用变量 变量的引用 两种变量定义(赋值) 归展开式变量 直接展开式变量 定义一个空格 ”操作符 变量的高级用法 变量的替换引用 变量的套嵌引用 变量取值 如何设置变量 追加变量值 指示符 多行定义 系统环境变量 目标指定变量 模式指定变量 第七章 的条件执行 的条件判断 个例子 条件判断的基本语法 标记测试的条件语句 笫八章:的内嵌函数 的函数 年月日 文于册 函数的调用语法 文本夂理函数 文件名处理函数 函数 函数 西数 函数 函数 函数 西数 的控制函数 第九章:执行 执行 指定 文件 指定终极日标 替代命令的执行 防止特定文件重建 替换变量定义 使用 进行编译测试 的命令行选项 第十章: 的隐含规则 使用隐含规则 隐含规则的使用 的隐含规则一览 隐含变量 代表命令的变量 命令参数的变量 隐含规则链 模式规 模式规则介绍 模式规则示例 自动化变量 年月日 文于册 模式的匹配 万用规则 重建内嵌隐含规则 缺省规则 后缀规则 隐含规则搜索算法 笫十一章:使用更新静态库文件 更新静态库文件 库成员作为目标 静态库的更新 更新静态庠的符号索引表 静态库的注意享项 静态库的后缀规则 第十二章: 的特点 的一些特点 源自 的特点 源自其他版本的特点 自身的特点 第十三章和其它版本的兼容 不兼容性 第十四章 的约定 书写约定 基本的约定 规则命令行的约定 代表命令变量 安装目录变量 的标准目标名 安装命令分类 第十五章的常见错误信息 产生的错误信息 附录:关键字索引 可识别的指示符 函数 的自动化变量 环境变量 后序 年月日 文于册 关于本书 本文瑾献给所有热爱 的程序员!本文文档版权所有 本文比较完整的讲述 工具,涵盖 的用法、语法。同时重 讨论如何为一个工程编写 作为一个程序员, 工具的使用以及编 写 是必嚅的。系统、详细讲述的文资料比较少,出于对广大文 的支持,本人在工作之余,花了个多月时间完成对“ 的翻译整理,完成 这个文版手册。夲书不是一个纯粹的语言翻译版本,其对 的一些语法 和用法根据我个人的工作经验进行了一些详细分析和说明,也加入了一些个人的观点和 实践总结。本书的所有的例子都可以在支持版本的 的系统正确执行。 由于个人水平限制,本文在一些地方存在描述不准确之处。恳请大家在阅读过程 提出您宝贵的意见,也是对我个人的帮助。我的个人电子邯箱地址: 非常愿意和大家交流!共同学习 阅读本书之前,读者应该对 的工具链和 的一些常用编程工具有一定的 了解。诸如: 等;同时在书写 时,需要能够进行一些 基本的编程。这些工具是维护一个工程的基础。如果大家对这些工具的用法不是 很熟悉,可参考项目资料 阅读本文的几点建议: 如果之前你对 没有了解、当前也不想深入的学习 的读 者。可只阅读本文各章节前半部分的内容(作为各章节的基础知识) 如果你已经对 比较熟悉,你更霄要关心此版本的新增特点、功能、 和之前版本不兼容之处;也可以作为开发过程过程的参考手册。 之前你对 没有概念、或者刚开始接触,本身又想成为一个 下 的专业程序员,那么建议:完整学习本文的各个章节,包括了基础知识和高级 用法、技巧。它会为你在 下的工程开发、工程管理提供非常有用的帮助。 此文文档当前版本 本文的所有勘误和最新版本可在主 页 上获取!! 谢谢! 徐海兵 年月日 文于册 第一章:概述 概既述 环境下的程序员如果不会侠用 来构建和管理自己的工程,应该 不能算是一个合柊的专业程序员,至少不能称得上是程序员。在 )环 境下侠用 的 工具能够比较容易的构建一个属于你自己的工程,整个工程的 编译只需要一个命令就可以完成编译、连接以至于最后的执行。不过这需要我们投入 些时间去完成一个或者多个称之为 文件的编写。此文件正是 正常工作 的基础 所要完成的 文件描述了整个工程的编译、连接等规则。其包括:工程 的哪些源文件需要编译以及如何编译、需要创建那些库文件以及如何创建这些库文 件、如何最后产生我们想要得可执行文件。尽管看起来可能是很复杂的事情,但是为工 程编写
Makefile,存在一些特殊的符号和变量,用于表示特定的含义或执行特定的操作。以下是一些常见的Makefile符号解析: 1. `target: dependencies`: 目标和依赖关系之间使用冒号分隔。目标是要构建的文件或操作,而依赖关系是构建目标所需的文件或操作。 2. `command`: 在目标规则,使用命令行来执行构建操作。命令必须以Tab键开头,并且每个命令都会在一个单独的Shell执行。 3. `$@`:这是一个自动化变量,表示当前目标的名称。在规则使用`$@`可以引用当前正在构建的目标。 4. `$<`:这是一个自动化变量,表示当前规则的第一个依赖项的名称。在规则使用`$<`可以引用第一个依赖项。 5. `$^`:这是一个自动化变量,表示当前规则的所有依赖项的名称。在规则使用`$^`可以引用所有的依赖项。 6. `.PHONY`:这是一个特殊目标,用于声明伪目标(即不对应实际文件)。伪目标通常用于定义一些不需要生成文件的操作,如`clean`等。 7. `.DEFAULT`:这是一个特殊目标,用于定义默认规则。当Makefile没有指定目标时,会执行`.DEFAULT`目标定义的规则。 8. `$(var)`:这是一个变量的引用。在Makefile,我们可以定义和使用变量来存储值,以便在规则引用。 这只是一些常见的Makefile符号解析,还有其他更多的符号和变量可以在Makefile使用。你可以根据需要查阅GNU Make的文档来了解更多详细信息。 希望这些解释对你有帮助!如果还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值