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

Makefile中常用自动化变量解释如下: $@------规则的目标文件名 $<------规则的第一个依赖项文件名 $^------规则的所有依赖文件列表,以空格隔开. $?-------所有比目标文件更加新的依赖文件列表,以空格隔开.…
makefile自动化变量在大型项目的Makefile使用的太普遍了,如果你看不懂自动化变量,开源项目的makefile你是看不下去的. 以往总是看到一些项目的makefile,总是要翻gnu的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中的定义的变量,就像是C/C++语言中的宏一样,他代表了一个文本字串,在Makefile中执行的时候其会自动原模原样地 展开在所使用的地方.其与C/C++所不同的是,你可以在Makefile中改变其值.在Makefile中,变量可以使用在“目标”,“依赖目标”,“ 命令”或是Makefile的其它部分中. 变量的命名字可以包含字符.数字,下划线(可以是数字开头),但不应该含有“:”.“#”.“=”或是空字符(空格.回车等).变量是大小写敏感 的,“foo”.“Foo”和“FOO…
该篇文章为转载,是对原作者系列文章的总汇加上标注. 支持原创,请移步陈浩大神博客:(最原始版本) 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中变量赋值有4种方法: = ,   := ,  += ,  ?= = :直接赋值 变量 = 值 :=   :位置相关赋值 如果右值为一个值,那么它和=没区别,如果右值为变量,那么左边变量的值等于右边变量当前位置的值,什么意思呢? a = abc b = $(a) a = jkl all: @echo $(b) .PHONY:all 执行这个makefile,输出 b的值为jkl,  在 b = $(a) 这句中,变量a的值被延迟展开,即由变量a最后一条赋值语句 a = jkl 决…
1 变量的定义 A variable is a name defined in a makefile to represent a string of text, called the variable's value. These values are substituted by explicit request into targets, prerequisites, recipes, and other parts of the makefile. (In some other vers…
Makefile的内容 在一个完整的 Makefile 中,包含了 5 个东西:显式规则.隐含规则.变量定义.指示符和注释. 显式规则:它描述了在何种情况下如何更新一个或者多个被称为目标的文件( Makefile 的目标文件).书写 Makefile 时需要明确地给出目标文件.目标的依赖文件列表以及更新目标文件所需要的命令(有些规则没有命令,这样的规则只是纯粹的描述了文件之间的依赖关系). 隐含规则:它是make根据一类目标文件(典型的是根据文件名的后缀)而自动推导出来的规则. make根据目标…
我们详细看看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…
1 基本原则如下 1.1 原则1 变量的普通赋值是有先后顺序的,后面的赋值会覆盖掉前面的赋值. 1.2 原则2 使用的时候,用的是其前面最后的赋值,就算其后面有使用了override指令的赋值也不会影响这条原则. 1.3 原则3 当使用了override指令定义赋值了变量后,其后对该变量的所有的赋值都是无效的.但是override之前的所有的赋值都是有效的.使用的时候是往前最近原则. 2 override变量.命令行参数和普通变量之间的屏蔽关系 override变量会屏蔽命令行参数,除非用+=:…
我在Makefile中添加了 ifndef EMASSDIR EMASSDIR=$(shell emassTop.py)endif 但是emassTop.py)后面不小心加入了空格,造成出现“Make error xxx Is a directory”的错误提示,最后仔细check,才解决问题.…
参考:http://www.gnu.org/software/make/manual/make.html '$(@D)'The directory part of the file name of the target, with the trailing slash removed. If the value of '$@' is dir/foo.o then '$(@D)' is dir. This value is . if '$@' does not contain a slash. '…
1. make工具 利用make工具可以自动完成编译工作,这些工作包括: 如果修改了某几个源文件,则只重新编译这几个源文件 如果某个头文件被修改了,则重新编译所有包含该头文件的源文件 利用这种自动编译可以大大简化开发工作,避免不必要的重新编译.make工具通过一个称为Makefile的文件来完成并自动维护编译工作,Makefile文件描述了整个工程的编译.连接规则. 2. Makefile文件 Makefile描述了整个工程的编译连接规则.Makefile的基本规则为: TARGET...: D…
二.makefile(上) 01.make工具   利用make工具可以自动完成编译工作.这些工作包括:如果修改了某几 个源文件,则只重装新编译这几个源文件:如果某个头文件被修改了,则 重新编译所有包含该头文件的源文件.利用这个自动编译可大大简化开发 工作,避免不必要的重新编译.   make工具通过一个称为Makefile的文件来完成并自动维护编译工作. Makefile文件描述了整个工程的编译.链接等规则. 02.Makefile的基本规则:   TARGET...:DEPENDENCIES…
make工具与Makefile文件 阅读目录 1. make工具 2. Makefile文件 3. Makefile的简单示例 4. 伪目标 5. Makefile 自动化变量 6. 编译生成多个可执行文件 7. make常用的内嵌函数 正文 回到顶部 1. make工具 利用make工具可以自动完成编译工作,这些工作包括: 如果修改了某几个源文件,则只重新编译这几个源文件 如果某个头文件被修改了,则重新编译所有包含该头文件的源文件 利用这种自动编译可以大大简化开发工作,避免不必要的重新编译.m…
参考:https://blog.csdn.net/haoel/article/details/2886    https://blog.csdn.net/haoel/article/details/2887 https://blog.csdn.net/haoel/article/details/2888     https://blog.csdn.net/haoel/article/details/2889 https://blog.csdn.net/haoel/article/details/…
makefile 自动化变量:   $@ : 规则的目标文件名  例如:main:main.o test.o                    g++ -Wall -g  main.o test.o -o main   可以写成:            main:main.o test.o                    g++ -Wall -g  main.o test.o -o $@    $< : 规则的第一个依赖文件名   例如:main.o: main.cpp        …
Makefile的工作流程 http://c.biancheng.net/view/7091.html Makefile文件是什么? 我们教程主要是讲的是 Makefile .很多 Linux(Unix) 做开发的初学者不了解 Makefile 是什么,甚至大部分 Windows 开发工程师对 Makefile 都特别陌生.这个其实很正常,如果你是在 Windows 下作开发的话不需要去考虑这个问题,因为 Windows 下的集成开发环境(IDE)已经内置了 Makefile,或者说会自动生成…
makefile编译多个可执行文件1: 多个 C 文件编译成不同的目标文件2: 多个 C 文件编译成 一个目标文件 注意:makefile的文件名的三种形式(优先级排序)makefile>Makefile>GNUMakefile 简单说,makefile类似快捷键.如:创建主函数文件mian.c 函数文件func.c编译二进制:gcc -g -Wall -c main.c -o mian.o gcc -g -Wall -c func.c -o func.o 链接并生成可执行文件:gcc -Wa…
自定义变量 = 是最基本的赋值,会把整个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)…