makefile下$^,$@,$?,$<,$(@D),$(@F)定义使用详解

Makefile:自动化变量 $@$^$<,$? Makefile有三个非常有用的变量。分别是$@$^$<代表的意义分别是: $@ 表示目标文件 $^ 表示所有的依赖文件 $< 表示第一个依赖文件 如果我们使用上面三个变量,那么我们可以简化我们的Makefile文件为: # 这是简化后的Makefile main:main.o mytool1.o mytool2.o gcc -o $@ $^ main.o:main.c mytool1.h mytool2.h gcc -c $< mytool1.o:mytool1.c 阅读详情

    每次看makefile的时候,总会遇到一些变量记不住,就需要去查找资料,今天有时间,就顺便把几个常用的变量学习了下,顺便总结了下记忆方法,感觉记住它们并不难,特把方法分享给大家。

变量定义:

$^

所有的依赖目标的集合。以空格分隔。如果在依赖目标中有多个重复的,那个这个变量

会去除重复的依赖目标,只保留一份。

 

$@

表示规则中的目标文件集。在模式规则中,如果有多个目标,那么,"$@"就是匹配于

目标中模式定义的集合

 

$?

所有比目标新的依赖目标的集合。以空格分隔。

 

$<

依赖目标中的第一个目标名字。如果依赖目标是以模式(即"%")定义的,那么"$<"

是符合模式的一系列的文件集。注意,其是一个一个取出来的。

 

$(@D)

表示"$@"的目录部分(不以斜杠作为结尾) ,如果"$@"值是"dir/foo.o",那么"$(@D)"

"dir",而如果"$@"中没有包含斜杠的话,其值就是"."(当前目录) 。

 

$(@F)

表示"$@"的文件部分,如果"$@"值是"dir/foo.o",那么"$(@F)"就是"foo.o""$(@F)"

当于函数"$(notdir $@)"

 

举例详解:

main.c  test.c  test1.c  test2.c 四个源文件

 

例子1

%.o : %.c

gcc  -c  $<  -o  $@

 

把所以的c文件编译生成对应的o文件,$<代表每次取的c文件,$@代表每次c文件对应的目标文件

 

 

例子2:

main main.o  test.o  test1.o  test2.o

gcc  -o  $@  $^

把所有的o文件编译生成可执行的main文件,$^代表所以的依赖文件集合(main.o  test.o  test1.o  test2.o),@代表目标文件(main)

 

例子3:

lib : test.o  test1.o  test2.o

ar r lib $?

 

把有更新的依赖文件重新打包到库lib中, 如果只有test1.o更新,则$?代表test1.o, 如果test.o  test1.o都有更新,则$?代表test.o  test1.o的集合。

 

总结:

 

$^      所有依赖目标的集合

$?      所有有更新的依赖目标集合

$<      依赖目标中的第一个目标,如果依赖以(%)模式定义,则一个一个取出来的

$@     目标文件

$(@D)   $@的目录部分

$(@F)   $@的文件部分

 

记忆方法:

 

dstsource1.o  source2.o  source3.o  source4.o  

xx ......

 

$^    其中^表示水平的范围限定,包含所有的依赖文件集合(source1.o  source2.o  source3.o  source4.o )

$?    其中?表示哪些依赖文件有更新是未知的,有更新的依赖文件集合(?

$<    其中<表示从集合中取值,第一个依赖的文件 source1.o

$@   目标文件  dst

$(@D)   $@的目录部分

$(@F)   $@的文件部分


华北理工大学以升实验班蓝桥杯选拔赛题解 文章目录华北理工大学以升实验班蓝桥杯选拔赛题解A:期末考试题目描述题目讲解代码B:月份题目描述题目讲解代码C:打饭题目描述题目讲解代码D : 正弦波信号题目描述题目讲解代码E : 亲爱的长方形题目描述题目讲解代码F:挖金子题目描述题目讲解代码G : 金金的游戏题目描述题目讲解代码H : 区间和题目描述题目讲解代码详细视频讲解请关注华北理工大学b站账号。 华北理工大学以升实验班蓝桥杯选拔赛题解 A:期末考试 题目描述 Description 期末考试过去许多天了,如今成绩都出来了,那么现在让我们对成绩我分个类 阅读详情

相关推荐

基于STM32、HAL库的IP2736U_EF快充协议芯片简介及驱动程序设计

@param connected: 连接状态指针 (1=已连接, 0=未连接)= 0x2736) // 检查厂商ID。* @param hip: IP2736U句柄指针。* @param hip: IP2736U句柄指针。* @param hip: IP2736U句柄指针。* @param hip: IP2736U句柄指针。* @param hip: IP2736U句柄指针。* @param hip: IP2736U句柄指针。* @param hip: IP2736U句柄指针。

corlin6688的博客 399

inux下C语言编程基础知识

   inux下C语言编程基础知识    这篇文章介绍在LINUX下进行C语言编程所需要的基础知识。在这篇文章当中,我们将会学到以下内容:  -源程序编译 

jiaoxiaomin的专栏 1130

2007-2021年 亚投行ADB-MRIO数据库,世界投入产出表

亚投行ADB-MRIO是指亚洲开发银行的多区域投入产出数据库。这个数据库是一个用于分析全球生产网络中各经济体间相互依存关系的工具,提供了亚洲各经济体以及世界其他主要经济体的投入产出数据,这些数据可以用于研究贸易、投资、产业关联等经济问题。

Makefile中的$@, $^, $< , $?, $%, $+, $*

1、$@ 表示目标文件$^ 表示所有的依赖文件$< 表示第一个依赖文件表示比目标还要新的依赖文件列表$% 仅当目标是函数库文件中,表示规则中的目标成员名。例如,如果一个目标是“foo.a(bar.o)”,那么,“$%”就是“bar.o”,“$@”就是“foo.a”。如果目标不是函数库文件(Unix下是[.a],Windows下是[.lib]),那么,其值为空。$+ 这个变量很像“$^”,也是所有依赖目标的集合。只是它不去除重复的依赖目标。

u011029104的专栏 6218

Makefile入门二、理解$@$^$<

文章目录一、理解\$@、\$^、\$<的含义二、举例 前面简单记录了一下Makefile中helloworld的用法,这次来理解一些$@$^$<的含义 一、理解$@$^$<的含义 $@ 表示目标文件 $^ 表示所有的依赖文件 $< 表示第一个依赖文件 $? 表示比目标还要新的依赖文件列表 二、举例 工作作用,将头文件放在include文件夹,cpp文件放在s...

hjxu2016的博客 2万+

makefile$^,$@,$?,$<,$(@D),$(@F)定义使用详解

变量定义$^ 所有的依赖目标的集合。以空格分隔。如果在依赖目标中有多个重复的,那个这个变量 会去除重复的依赖目标,只保留一份。 $@ 表示规则中的目标文件集。在模式规则中,如果有多个目标,那么,"$@"就是匹配于 目标中模式定义的集合 $? 所有比目标新的依赖目标的集合。以空格分隔。 $&lt; 依赖目标中的第一个目标名字。如果依赖目标是以模式(即"%")定义的,那么"$&lt;"将 是符合模...

TH_NUM的博客 6602

makefile$^,$@,$?,$&lt;,$(@D),$(@F)定义使用详解

    每次看makefile的时候,总会遇到一些变量记不住,就需要去查找资料,今天有时间,就顺便把几个常用的变量学习了下,顺便总结了下记忆方法,感觉记住它们并不难,特把方法分享给大家。变量定义$^所有的依赖目标的集合。以空格分隔。如果在依赖目标中有多个重复的,那个这个变量会去除重复的依赖目标,只保留一份。 $@表示规则中的目标文件集。在模式规则中,如果有多个目标,那么,"$@"就是匹配于目标中...

冰夫子的博客 2万+

转:makefile$^,$@,$?,$<,$(@D),$(@F)定义使用详解

转载自:https://blog.csdn.net/qq_39498080/article/details/79237260 makefile$^,$@,$?,$&lt;,$(@D),$(@F)定义使用详解 2018年02月02日 11:44:52冰夫子阅读数 2432 每次看makefile的时候,总会遇到一些变量记...

weixin_30709929的博客 234

makefile$(wildcard $^),$^,$@,$?,$<,$(@D),$(@F)

makefile$(wildcard $^),$^,$@,$?,$<,$(@D),$(@F)代表的不同含义$(filter-out $(PHONY) $(wildcard $^),$^)常用用法为$(wildcard *.c)表示列举当前目录下的所有.c文件这里$^因为会包含依赖的文件名,如果包含的该文件存在,那么将返回其含路径的文件名所以$(wildcard $^)就是用来过滤...

abcd1411210488的博客 334

Makefile有三个非常有用的变量。分别是$@$^$

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34013044的博客 273

makefile$(wildcard $^),$^,$@,$?,$<,$(@D),$(@F)含义

本文来自:http://blog.chinaunix.net/uid-20564848-id-217918.html makefile$(wildcard $^),$^,$@,$?,$ $(filter-out $(PHONY) $(wildcard $^),$^) 常用用法为$(wildcard *.c) 表示列举当前目录下的所有.c文件 这里$^因为会包含依赖的文件名,如果包含

LYJ个人博客,记录技术、八卦、生活,分享各种心得,期待与朋友们一同进步 4505

示例说明 Makefile 中的 $(@F),及其用法示例$$dir $@ $$^ %.c

在这个例子中,$@ 表示当前规则的目标文件名,即 hello_exe。而$(@F) 表示目标文件名的不包括路径部分的部分,即 hello_exe。在 Makefile 中,$(@F) 表示当前规则的目标文件名(不包括路径部分)。可能需要注意命令行的开头应该是 tab键,而不是8个空格键;这个变量通常用于在规则中引用目标文件名。

eloudy的专栏 900

makefile$(wildcard $^),$^,$@,$?,$<,$(@D),$(@F)

原文网址:http://blog.chinaunix.net/uid-20564848-id-217918.html

IvanLJF的专栏 1166

Makefile中的$@ $^等常见的符号解析

之前学过一些Makefile,但是长时间不看,里面的符号又不少,慢慢就忘记了,这次在看Makefile文件,就顺带整理一些常用的符号,以后查询起来也方便。 **$@**表示目标 **$^**表示所有的依赖 **$<**表示第一个依赖 := 即时赋值 ?= 延时赋值 += 附加 例如: CC = gcc #延时变量赋值,当用到CC的时候再给它赋gcc值 CUR = -O0 -g -Wall main: main.c test.c 可表示为:$(CC) $(CUR) -o $@ $^

it_rensheng的博客 7844

makefile中的$@$< 和 $^

自动变量含义典型用途$@当前目标文件的名称生成目标文件$<第一个依赖文件的名称编译源文件生成目标文件$^所有依赖文件的名称列表链接所有依赖文件生成目标文件。

qq_43352163的博客 2078

Makefile中的$@$<.......

如果目标是“dir/a.foo.b”,并且目标的模式是“a.%.b”,那么,“$*”的值就是“dir/a.foo”。如果目标中没有模式的定义,那么“$*”也就不能被推导出,但是,如果目标文件的后缀是make所识别的,那么“$*”就是除了后缀的那一部分。例如:如果目标是“foo.c”,因为“.c”是make所能识别的后缀名,所以,“$*”的值就是“foo”。例如,如果一个目标是“foo.a(bar.o)”,那么,“$%”就是“bar.o”,“$@”就是“foo.a”。$^ 表示所有的依赖文件。

x16669的博客 1270

MakeFile中的@与$的作用

‘@’ 符号的使用 通常makefile会将其执行的命令行在执行前输出到屏幕上。如果将‘@’添加到命令行前,这个命令将不被make回显出来。 例如:@echo --compiling module----; // 屏幕输出 --compiling module---- echo --compiling module----; // 没有@ 屏幕输出echo --compiling mod...

迪迦 • 奥特曼 1万+

Makefile学习笔记:$(A) $^ $@和%,条件分支,常见函数

Makefile里的$(A) $^ $@和%,条件分支ifeq($(ARCH),x86),常见函数patsubst、notdir、wildcard、foreach

weixin_56442707的博客 1050

整理makefile经典教程

学习

abitnervous的博客 329
上一篇: android recovery 模块知识需求汇总
下一篇: 深入理解ext4文件系统
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值