Makefile之自动化变量】的更多相关文章

makefile自动化变量在大型项目的Makefile使用的太普遍了,如果你看不懂自动化变量,开源项目的makefile你是看不下去的. 以往总是看到一些项目的makefile,总是要翻gnu的Makefile文档,很是麻烦,索性一起总结.也算是重新学习一次. Makefile  $@, $^, $< $@  表示目标文件$^  表示所有的依赖文件$<  表示第一个依赖文件$?  表示比目标还要新的依赖文件列表 ...待续…
所谓自动化变量,就是这种变量会把“模式”中所定义的一系列的文件自动地挨个取出,直至所有的符合模式的文件都取完了.这种自动化变量只应出现在规则的命令中. $@ 表示规则中的目标文件集.在模式规则中,如果有多个目标,那么,"$@"就是匹配于目标中模式定义的集合.一般用作:表示第一个目标文件: $^ 所有的依赖目标的集合.以空格分隔.如果在依赖目标中有多个重复的,那个这个变量会去除重复的依赖目标,只保留一份. $+ 这个变量很像"$^",也是所有依赖目标的集合.只是它不去…
Makefile中常用自动化变量解释如下: $@------规则的目标文件名 $<------规则的第一个依赖项文件名 $^------规则的所有依赖文件列表,以空格隔开. $?-------所有比目标文件更加新的依赖文件列表,以空格隔开.…
转自:http://www.2cto.com/os/201302/191344.html   makefile中的自动化变量$@,$%,$   自动化变量  模式规则中,规则的目标和依赖文件名代表了一类文件名:规则的命令是对所有这 一类文件重建过程的描述,显然,在命令中不能出现具体的文件名,否则模式规则失去 意义.那么在模式规则的命令行中该如何表示文件,将是本小节的讨论的重点.  假如你需要书写一个将.c 文件编译到.o 文件的模式规则,那么你该如何为gcc 书写 正确的源文件名?当然了,不能使…
转自:http://blog.chinaunix.net/uid-28458801-id-3495215.html 自动化变量 模式规则中,规则的目标和依赖文件名代表了一类文件名:规则的命令是对所有这一类文件重建过程的描述,显然,在命令中不能出现具体的文件名,否则模式规则失去意义.那么在模式规则的命令行中该如何表示文件,将是本小节的讨论的重点. 假如你需要书写一个将.c 文件编译到.o 文件的模式规则,那么你该如何为gcc 书写正确的源文件名?当然了,不能使用任何具体的文件名,因为在每一次执行模…
makefile里的变量就像一个变量,变量的作用主要如下: (1)保存文件名列表. (2)保存编译器的参数. makefile中的变量是用一个字符串在makefile中定义的,这个文本串就是变量的值.只要在一行的开始写下这个变量的名字,后面跟一个‘=’,然后跟要设定的这个变量的 值即可定义变量,下面是定义变量的语法: 变量名=字符串 使用时 ,把变量把括号括起来.并在前面加上“$”符号,就可以引用变量的值: $(变量名) make解释规则时“变量名”在等式右端展开为定义它的字符串,变量一般在ma…
我们在写makefile时 多多少少会用到shell脚本, 对于变量的在shell中的使用有一些要注意的细节.让我们从一个简单的makefile来看看. 注意makefile中一定要有一个目标,且一定要有一个终极目标,若想要有多个目标应该设立一个伪目标.如下: all: hello hello2 hello3 hello: hello.c gcc .... hello2: hello2.c gcc ... hello3: hello3.c gcc ... shell变量定义和使用: NAME=h…
$(warning $(DVD_SERVICE)) // DVD_SerVICE是Makefile中的变量 $(warning   ST40_IMPORTS is $(ST40_IMPORTS)) 变量名,一定要加括号.不加的话,可以发现前面都无法输出变量的值. 1.输出打印信息的方法是:$(warning xxxxx),$(error xxxxx) 2.输出打印变量值的方法是:$(warning  $(XXX)) 在makefile中打印警告或者错误消息的方法:$(warningxxxxx)或…
将shell命令的输出赋值给变量: VALUE = $(shell   命令) Makefile中给变量赋值: =     是递归展开式变量 value1 = 5 value2 = $(value1) value1 = 6 最终$(value2)就变成了6 :=    是直接展开式变量 value1 := 5 value2 := $(value1) value1 :=6          最终$(value2)是5 ?=   是条件赋值       value ?= xyz        意思是…
目录 前言 概念 Chapter 5:变量的基础 5.1 变量的基础 * 空格的定义 ** 一些赋值 一些特殊的符号 5.2 变量中的变量 * 5.3 变量高级用法 变量值替换 把变量的值再当成变量 5.5 override 指示符 5.6 多行变量 5.7 环境变量 5.8 目标变量 5.9 模式变量 参考 前言 本笔记主要记录Makefile一些概念要点. 概念 Chapter 5:变量的基础 变量可以使用在 目标 . 依赖目标 . 命令 或是 Makefile的其它部分中. 变量的名字可以…
1.变量的引用方式: "$(变量名)"或者"¥{变量名}" 例如: ${Objs}就是取变量Objs的值 注意: 当变量名为单字符是可以采用:"$a"的方式引用,多字符则不行 2.变量定义的两种方法,即对变量进行赋值: (1)使用递归展开式变量"=" 左侧为变量名,右侧是变量的值,该方法的优点是右侧变量的值可以定义在文件的任何一处,也就是说,右侧中的变量不一定非要是已定义好的值,其也可以使用后        面定义的值. (2…
自动变量假设您编写一个编译‘.c’文件生成‘.o’文件的规则:您怎样编写命令‘CC’,使它能够操作正确的文件名?您当然不能将文件名直接写进命令中,因为每次使用隐含规则操作的文件名都不一样. 您应该使用make的另一个特点,自动变量.这些变量在规则每次执行时都基于目标和依赖产生新值.例如您可以使用变量‘$@’代替目标文件名,变量‘$<’代替依赖文件名. 下面是自动变量列表: $@ 规则的目标文件名.如果目标是一个档案成员,则变量‘$@’ 档案文件的文件名.对于有多个目标的格式规则(参阅格式规则简介…
在makefile中赋值方式有:'='.':='.'?='和'+='. A = a $(B) B = b all: echo $(A) #运行结果:echo a b a b 这种赋值方式是没有先后顺序的,但是这种赋值方式可能会出现问题,例如递归定义时:A = $(A) A := a $(B) B = b all: echo $(A) # 运行结果:echo a a 这种赋值方式有先后顺序,只能使用已经定义的变量. A = a A ?= b B ?= c all: echo $(A) $(B) #…
http://www.blogjava.net/canvas/articles/quick_makefile.html 几个简单适合小程序的Makefile,可直接拷贝使用,自己mark一下,这样长时间不用Makefile也不用去看手册了 0.只有一个文件 # 变量的定义,方便使用CC      = gccCCFLAGS = -O2 -sBIN     = testOBJ     = root_password_tool_win32.o $(BIN) : $(OBJ)    $(CC) $(CC…
本博文是在学习了<GNU Make中文手册>后记录下来的自己的关于自动产生makefile依赖的语句的理解,向大家分享. <GNU make中文手册>中的相关章节见一下链接: http://blog.csdn.net/gmpy_tiger/article/details/51849257 ======================================================================================== 为了理解自动产生依…
自定义变量 = 是最基本的赋值,会把整个makefile展开之后再决定是多少 x=foo y=$(x)bar #y是asdbar,不是foobar x=asd := 是覆盖之前的值,和=不同,和赋值的位置有关 x=foo y:=$(x)bar #y是foobar x=asd ?= 是如果没有被赋值过就赋予等号后面的值,赋过了就不管了 += 是添加等号后面的值 变量的使用 和shell一样,makefile通过$(FLAGS)来读取变量FLAGS的值,对于$本身,使用$$读取 变量替换 注意这两种…
使用变量 ———— 在 Makefile中的定义的变量,就像是C/C++语言中的宏一样,他代表了一个文本字串,在Makefile中执行的时候其会自动原模原样地展开在所使 用的地方.其与C/C++所不同的是,你可以在Makefile中改变其值.在Makefile中,变量可以使用在“目标”,“依赖目标”,“命令”或是 Makefile的其它部分中. 变量的命名字可以包含字符.数字,下划线(可以是数字开头),但不应该含有“:”.“#”.“=”或是空 字符(空格.回车等).变量是大小写敏感的,“foo”…
鉴于之前有一些了解,还有自己的学习习惯,我一上来就看Makefile的变量这一章.主要脉络是根据GNU make中文手册. 第六章:Makefile中的变量 6使用变量 定义:变量是一个名字,代表一个文本字符串:类似C语言中的宏 区别在于这个变量在Makefile的目标.依赖.命令中引用的地方会被它的值所取代: 特征:1.Makefile中变量和函数的展开(除了规则命令行)是在make读取makefile文件时进行的: 2.变量可用于代表:一个文件名列表.编译选项列表.程序运行的选项参数列表(C…
引用文章A:http://blog.csdn.net/liang13664759/article/details/1771246 文章介绍:非常详细的文章,讲解上都是比较基础的知识. 本文可能会持续更新部分引用文章.但博文本身更新内容并不会太多.主要因为个人写作水平问题,并不适合讲解专业性质的知识,容易误人子弟. 文章中会记录一些比较常用的指令和函数,方便快速查找. 一,基本使用. makefile基本依赖规则:默认情况下,会找到第一个目标指令,然后检测其对应依赖,然后进行初步的索引和指令执行(…
在 Makefile 中的定义的变量,就像是 C/C++语言中的宏一样,他代表了一个文本字串,在 Makefile 中执行的时候其会自动原模原样地展开在所使用的地方.其与 C/C++所不同的是,你可以在 Makefile 中改变其值.在 Makefile 中,变量可以使用在"目标","依赖目标","命令"或是 Makefile 的其它变量中. 变量的命名字可以包含字符.数字,下划线(可以是数字开头),但不应该含有":".&qu…
本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/gcc-makefile/770.html   使用变量: 在Makefile中的定义的变量,就像是C/C++语言中的宏一样,他代表了一个文本字串,在Makefile中执行的时候其会自动原模原样地展开在所使用的地方.其与C/C++所不同的是,你可以在Makefile中改变其值.在Makefile中,变量可以使用在“目标”,“依赖目标”,“命令”…
By francis_hao    Oct 30,2017   makefile中可以使用变量,变量有多种类型,下面分别介绍 简单变量 简单变量的命名规则和c语言一致. 给变量赋值就表示创建了这个变量,使用变量时需使用$()或${}这样的形式. 变量的赋值有几种不同的形式 = 递归扩展的变量赋值,仅当在变量被使用的时候才去扩展.变量可以先使用后赋值 例如: a=$(b) b=$(c) c=d 在一系列的赋值过后,a的值就是$(b). 只有在使用a的时候,才会一步步的扩展a=$(b)=$(c)=d…
一.变量的基础 变量在声明时需要给予初值,而在使用时,需要给在变量名前加上“$”符号,但最好用小括号“()”或是大括号“{}”把变量给包括起来.如果你要使用真实的“$”字符,那么你需要用“$$”来表示.二.变量中的变量 在定义变量的值时,我们可以使用其它变量来构造变量的值,在Makefile中有两种方式来在用变量定义变量的值. 1)使用“=”号,在“=”左侧是变量,右侧是变量的值,右侧变量的值可以定义在文件的任何一处,也就是说,右侧中的变量不一定非要是已定义好的值,如: foo = $(bar)…
在Makefile中的定义的变量,就像是C/C++语言中的宏一样,他代表了一个文本字串,在Makefile中执行的时候其会自动原模原样地 展开在所使用的地方.其与C/C++所不同的是,你可以在Makefile中改变其值.在Makefile中,变量可以使用在“目标”,“依赖目标”,“ 命令”或是Makefile的其它部分中. 变量的命名字可以包含字符.数字,下划线(可以是数字开头),但不应该含有“:”.“#”.“=”或是空字符(空格.回车等).变量是大小写敏感 的,“foo”.“Foo”和“FOO…
1.自动化变量通配符http://blog.sina.com.cn/s/blog_7c95e5850101b38l.html 2.wildcard 使用http://blog.csdn.net/liangkaiming/article/details/6267357 3.srcs=(wildcard:%.o=%.c)说明 http://os.chinaunix.net/a2008/0312/978/000000978004.shtml 4.$(srcs):%.o:%.c说明==$(patsubs…
该篇文章为转载,是对原作者系列文章的总汇加上标注. 支持原创,请移步陈浩大神博客:(最原始版本) http://blog.csdn.net/haoel/article/details/2886 我转自一个博主,基于原博客的整理版本: https://blog.csdn.net/seven_amber/article/details/70216216 使用变量 在 Makefile中的定义的变量,就像是C/C++语言中的宏一样,他代表了一个文本字串,在Makefile中执行的时候其会自动原模原样地…
在讲vpath之前,我们首先了解以下makefile文件. 在类Unix系统中,当我们使用源码编译某个软件的时候,我们会使用confiure,make,make install这三个命令,其中cofigure生成makefile文件,make和make install编译和安装.makefile可以理解为一个脚本文件,使用make命令工具解析,其中定义了一系列的编译规则,如哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译. 那为什么会需要makefile了? 这主要因为编译这项工作随…
我们详细看看Makefile中关于变量的语法规则.先看一个简单的例子: foo = $(bar) bar = Huh? all: @echo$(foo) 我们执行make将会打出Huh?.当make读到foo = $(bar)时,确定foo的值是$(bar),但并不立即展开$(bar),然后读到bar = Huh?,确定bar的值是Huh?,然后在执行规则all:的命令列表时才需要展开$(foo),得到$(bar),再展开$(bar),得到Huh?.因此,虽然bar的定义写在foo之后,$(fo…
很详细.很移动的Linux makefile 教程 内容如下: Makefile 介绍 Makefile 总述 书写规则 书写命令 使用变量 使用条件推断 使用函数 make 的运行 隐含规则 使用make更新函数库文件 后序 近期在学习Linux下的C编程,买了一本叫<Linux环境下的C编程指南>读到makefile就越看越迷糊,可能是我的理解能不行. 于是google到了以下这篇文章.通俗易懂.然后把它贴出来,方便学习. 后记,看完发现这篇文章和<Linux环境下的C编程指南>…
Makefile中给变量赋值: =     是递归展开式变量 value1 = 5 value2 = $(value1) value1 = 6 最终$(value2)就变成了6 :=    是直接展开式变量 value1 := 5 value2 := $(value1) value1 :=6          最终$(value2)是5     GUN make的执行过程分为两个阶段. 第一阶段:读取所有的makefile文件(包括“MAKEFILES”变量指定的.指示符“include“指定的…