javascript中有5种数据类型,分别为:Undefined、Boolean、Object、Number、String,这几类型的数据,当他们处在表达式里面的时候,js解析器会自动将其转换成布尔值来决定当前的条件究竟符合哪个逻辑分支...(当然,我们也可以手动通过调用Boolean(var)方法来转换),从而决定执行那个方法体的代码,那把这几种类型的值转换成布尔型时,究竟是遵循怎样的规则呢?...数据类型 转换成true的取值 转换成false的取值 Undefined 无 undefined Boolean true false Object 非null时都为true null Number...非0和NaN时都为true 0和NaN String 非空字符串 ""(空字符串) 上述就是js中的转换规则,在开发的时候,一定要认真分析变量的可能取值及转换值,如果预料中得到true的却得到false
Makefile中的字符串替换,做下验证和总结。...案例:Makefile Tutotial中一段代码 Makefile Tutotial最后给出了一段makefile,里面OBJS有字符串通配、替换的过程: Makefile SRC_DIRS := ....Makefile字符串替换规则 场景一:整体匹配替换 Makefile SRCS := ./aa123zz.c ./aa44325drzz.cpp ..../aa332dzz.cxx 规则:注意字符串中的空格起到分隔作用,分隔的每一个字符串都会应用下面规则 $(变量名:旧值=新值) 场景二:通配符替换 Makefile SRCS := ..../AA332d%ZZ.cxx 规则:注意带通配符的话,旧值必须整体匹配,匹配一部分不行。 $(变量名:旧值带通配符)=新值带不带通配符都行通配符代表旧值中匹配的字符)
如果变量的值非空(在Makefile中,没有定义的变量的值为空),表达式为真。...,保留所有不符合此模式的单词。...在Makefile中可以使用的通配符有:* 、? 、 […]。通配符的使用方法和含义和在shell中一样。 通配符 使用说明 * 匹配0个或者是任意个字符 ?...:所有更新过的依赖文件 在Makefile中,通配符主要用在两个场合: 用在规则的目标和依赖中:make在读取Makefile时会自动对其进行匹配处理 test: *.o gcc -o $@ $...^ *.o: *.c gcc -c $^ 用在规则的命令中:通配符的通配处理在shell执行命令时完成 clean: rm -f *.o 除了以上两种情况,在其他地方都不能直接使用通配符
命令:通过执行该命令由依赖文件生成目标 makefile 工作原理 1、若想生成目标,检查规则中的依赖条件是否存在,如不存在,则寻找是否有规则用来生成该依赖文件 2、检查规则中的目标是否需要更新,必须先检查它的所有依赖...$@:在命令中使用,表示规则中的目标 $<:在命令中使用,表示规则中的第一个条件 $^:在命令中使用,表示规则中的所有条件,组成一个列表,以空格隔开,如果这个列表中有重复的项则消除重复项。...执行 make 命令后,可以达到同样的效果。 makefile 模式规则 再分析一下上面的 makefile 代码,对于每个要生成的 .o 文件,我们都要给他写一条规则,如果有很多怎么办?...难道要一条一条的写吗?当然不会,makefile 提供了一种模式规则,使用 % 符号来匹配任意字符串达到通配的作用,先来看改造后的代码,然后我们来分析其执行流程。...$@ 规则中的 %.c 的 % 值,取决于目标 %.o,而此时 %.o 中 % 的值是上面生成 app 所需的 main.o,所以解释以后的代码相当于下面这样: main.o:main.c gcc
也许在写Makefile的时候,都要养成这样一个习惯,一般的风格都是: clean: rm $(obj) *.o 更为稳健的做法是(原因:如果当前目录存在clean文件,该命令会执行失败),解决办法...:clean从来都是放 在文件的最后。...书写规则 显示规则(@字符): 当用@字符在命令前面时,那么执行这条命令的时候,这条命令不会显示出来。...这些变量可以让我们更加快速的完成Makefile的编写,其中自动变量只能在规则中的命令使用,常用的自动变量如下: $@:规则中的目标 $<:规则中的第一个依赖文件 $^:规则中的所有依赖文件 CC...模式规则实在目标及依赖中使用%来匹配对应的文件,我们依旧使用上面的例子,采用模式规则格式,如下: CC = gcc OBJ = main.o add.o output: $(OBJ) $(CC)
Make命令的参数 -f:指定“makefile”文件; -i:忽略命令执行返回的出错信息; -s:沉默模式,在执行之前不输出相应的命令行信息; -r:禁止使用build-in规则; -n...你可以在你的makefile中改变这些变量的值,或是在make的命令行中传入这些值,或是在你的环境变量中设置这些值,无论怎么样,只要设置了这些特定的变量,那么其就会对隐含规则起作用。...一个模式规则就好像一个一般的规则,只是在规则中,目标的定义需要有% 字符。% 的意思是表示一个或多个任意字符。在依赖目标中同样可以使用% ,只是依赖目标中的% 的取值,取决于其目标。...模式规则介绍 模式规则中,至少在规则的目标定义中要包含%,否则,就是一般的规则。目标中的% 定义表示对文件名的匹配,%表示长度任意的非空字符串。...如果%定义在目标中,那么,目标中的%的值决定了依赖目标中的%的值,也就是说,目标中的模式的%决定了依赖目标中%的样子。
=” 2.4、变量追加“+=” 三、Makefile 模式规则 四、Makefile 自动化变量 五、Makefile 伪目标 Linux嵌入式开发——Makefile基本语法 接下来我们来详细介绍一下基本的...答案是肯定的,不过我们需要引入我们接下来要介绍的Makefile 模式规则了。好啦,就让我们开始吧!!!...: main.c gcc -c main.c input.o: input.c gcc -c input.c calcu.o: calcu.c gcc -c calcu.c 其实我们所谓的模式规则就是在目标中引入了一个通配符...四、Makefile 自动化变量 自动化变量:这种变量会把模式中所定义的一系列的文件自动的挨个取出,直至所有的符合模式的文件都取完,自动化变量只应该出现在规则的命令中。...我们来具体看一看都有哪些自动化变量: 自动化变量 描述 $@ 规则中的目标集合,在模式规则中,如果有多个目标的话,“$@”表示匹配模式中定义的目标集合。
但是还有一种情况:在Makefile的规则中,一般不会把头文件添加到目标依赖中。...应用: 立即展开变量一般用在规则中的目标、目标依赖中。make在解析Makefile阶段,需要这些变量有确切的值来构建依赖关系树。...延迟展开变量一般用在规则的命令行中,这些变量在make编译过程中被引用到才会展开,获得其实际的值。 自动变量 在Makefile中,大家经常会见到类似 @、 ^、$<这种类型的变量。...Makefile时可能会遇到,比如: $%:当规则的目标是一个静态库文件时,$%代表静态库的一个成员名 $+:类似$^,但是保留了依赖文件中重复出现的文件 $*:在模式匹配和静态模式规则中,代表目标模式中...比如hello.c,当匹配模式为%.c时,$*表示hello $(@D):表示目标文件的目录部分 $(@F):表示目标文件的文件名部分 $(*D):在模式匹配中,表示目标模式中%的目录部分 $(*F):
二、变量中的变量 在定义变量的值时,我们可以使用其它变量来构造变量的值,在Makefile中有两种方式来在用变量定义变量的值。...(CFLAGS)的值是什么,在prog目标,以及其所引发的所有规则中(prog.o foo.o bar.o的规则),$(CFLAGS)的值都是“-g” 九、模式变量 在GNU...你可以在你的makefile中改变这些变量的值,或是在make的命令行中传入这些值,或是在你的环境变量中设置这些值,无论怎么样,只要设置了这些特定的变量,那么其就会对隐含规则起作用。...五、定义模式规则 你可以使用模式规则来定义一个隐含规则。一个模式规则就好像一个一般的规则,只是在规则中,目标的定义需要有"%"字符。"%"的意思是表示一个或多个任意字符。...如果"%"定义在目标中,那么,目标中的"%"的值决定了依赖目标中的"%"的值,也就是说,目标中的模式的"%"决定了依赖目标中"%"的样子。
二、变量中的变量 在定义变量的值时,我们可以使用其它变量来构造变量的值,在Makefile中有两种方式来在用变量定义变量的值。...CFLAGS)的值是什么,在prog目标,以及其所引发的所有规则中(prog.o foo.o bar.o的规则),(CFLAGS)的值都是“-g” 九、模式变量 在GNU的make中,还支持模式变量(Pattern-specific...你可以在你的makefile中改变这些变量的值,或是在make的命令行中传入这些值,或是在你的环境变量中设置这些值,无论怎么样,只要设置了这些特定的变量,那么其就会对隐含规则起作用。...五、定义模式规则 你可以使用模式规则来定义一个隐含规则。一个模式规则就好像一个一般的规则,只是在规则中,目标的定义需要有”%”字符。”%”的意思是表示一个或多个任意字符。...如果”%”定义在目标中,那么,目标中的”%”的值决定了依赖目标中的”%”的值,也就是说,目标中的模式的”%”决定了依赖目标中”%”的样子。
在 Makefile 中,目标和依赖是通过规则(rule)来表达的。 makefile 的依赖是从上至下的,换句话说就是目标文件是第一句里的目标, 如果不满足执行依赖,就会继续向下执行。...、三个自动变量和模式规则 ①、三个自动变量 $@ # 在规则的命令中,表示规则中的目标。...$^ # 在规则的命令中,表示所有依赖条件。组成一个列表,以空格隔开,如果这个列表中有重复项,则去重 $< # 在规则的命令中,表示第一个依赖条件。...在 Makefile 中有两种变量,一种称为即时变量(简单变量),另一种称为延时变量 即时变量(简单变量) A := xxx # A 的值即刻确定,在定义时即确定 延时变量 B = xxx...可以看到 A 的值为空,B 的值为 abc,因为 A 为即时变量,在定义时即确定,所以为空 修改 Makefile 将 C 的赋值放在最后: A := $(C) B = $(C) #C = abc
在模式规则中,如果有多个目标,那么,"$@"就是匹配于目标中模式定义的集合。 $% 仅当目标是函数库文件中,表示规则中的目标成员名。...$* 这个变量表示目标模式中"%"及其之前的部分。如果目标是"dir/a.foo.b",并且目标的模式是"a.%.b",那么,"$*"的值就是"dir/a.foo"。...这个特性是GNU make的,很有可能不兼容于其它版本的make,所以,你应该尽量避免使用"$*",除非是在隐含规则或是静态模式中。...在上述所列出来的自动量变量中。四个变量($@、$<、$%、$*)在扩展时只会有一个文件,而另三个的值是一个文件列表。...还得要注意的是,这些变量只使用在规则的命令中,而且一般都是"显式规则"和"静态模式规则"(参见前面"书写规则"一章)。其在隐含规则中并没有意义。 1.
= 4.1、=赋值 使用=在给变量赋值时,不一定使用已经定义好的值,也可以使用后面定义的值,变量的真实值为其所引用的变量的最后一次有效值。...6、Makefile模式规则 在有多个.c文件需要生成.o文件时,可以通过模式规则将所有的.c文件变为对应的.o文件。...模式规则中,至少在规则的目标定义中包含“%”,否则就是一般规则,目标中的“%”表示对文件名的匹配,“%”表示任意长度的非空字符串,比如“%.c”就是代表所有以.c结尾的文件。...自动化变量将模式中所定义的一系列的文件自动的逐个取出,直到所有的符合模式的文件都取完,自动化变量只应该出现在规则的命令中。 ? ? 最终makefile变为: ?...在工作目标创建一个与执行指令同名的文件时,执行指令并不会执行,因为规则没有依赖文件,所以目标认为是最新的。
一、Makefile的规则 在讲述这个Makefile之前,还是让我们先来粗略地看一看Makefile的规则。 target ... : prerequisites ......其与C/C++所不同的是,你可以在Makefile中改变其值。在Makefile中,变量可以使用在“目标”,“依赖目标”,“命令”或是Makefile的其它部分中。...二、变量中的变量 在定义变量的值时,我们可以使用其它变量来构造变量的值,在Makefile中有两种方式来在用变量定义变量的值。...(CFLAGS)的值是什么,在prog目标,以及其所引发的所有规则中(prog.o foo.o bar.o的规则),$(CFLAGS)的值都是“-g” 九、模式变量 在GNU的make中,还支持模式变量...模式变量的好处就是,我们可以给定一种“模式”,可以把变量定义在符合这种模式的所有目标上。
(2)变量定义:在Makefile中可以定义一系列的变量,变量一般都是字符串,当Makefile被执行时,变量的值会被扩展到相应的引用位置上。...在模式规则中,如果有多个目标,那么," $@ " 就是匹配于目标中模式定义的集合。 $% ——仅当目标是函数库文件中,表示规则中的目标成员名。...这种规则更加通用,因为可以利用模式规则定义更加复杂的依赖性规则。...模式规则看起来非常类似于正则规则,但在目标名称的前面多了一个 % 号,同时可用来定义目标和依赖文件之间的关系,例如下面的模式规则定义了如何将任意一个 X.c 文件转换为 X.o 文件: %.c:%.o...2.4 Makefile中的函数 在Makefile中可以使用函数来处理变量,从而让命令或规则更为的灵活和具有智能,函数调用,很像变量的使用,也是以“$”来标识的,函数调用后,函数的返回值可以当做变量来使用
静态模式 对应多个目标对象,构建每个对象对应名称的依赖关系的规则。...name.xxxx (在Makefile中 $ 有特殊含义,如果要表示它的字面意思需要写两个 $,所以 Makefile 中的四个 $ 传给Shell变成两个 $,而两个 $ 在Shell中表示当前进程的...=, +=, = 和 := 的差别 ?= 如果没有被赋值过就赋予等号后面的值 += 添加等号后面的值 = 最基本的赋值(最后才展开) make会将整个makefile展开后,再决定变量的值。...也就是说,变量的值展开是在最后, 使我们可以在最后才指定变量的值。 x = XXX y = $(x) x = YYY 在上例中,y的值将会是 YYY ,而不是 XXX。...:= 是覆盖之前的值(类似C中的 = ) 变量的值决定于它在makefile中的位置,而不是整个makefile展开后的最终值。
基本概念 目标 (Targets):在 Makefile 中,目标是要生成的文件或执行的操作的名称。目标可以是文件名,也可以是伪目标,用于执行特定任务而不生成文件。...依赖项 (Dependencies):依赖项是与目标相关联的文件或其他目标,它们在目标生成之前必须存在或已经生成。 规则 (Rules):规则定义了如何生成目标以及生成目标所需的命令。...命令 (Commands):命令是在生成目标时要执行的操作。命令必须以 Tab 键开头。 变量 (Variables):变量用于存储文本或命令,并可以在整个 Makefile 中重复使用。...Makefile 语法 一个基本的 Makefile 规则的语法如下: target: dependencies command target:要生成的目标的名称。...这些函数可以在 Makefile 中用于各种目的,例如文件操作、文本处理和条件判断。 5.2 自动化依赖关系生成 通常,Makefile 中的依赖关系需要手动维护。
定义编译规则、自动化编译、提高效率 组织文件 Makefile由一组规则(Rule)组成,每条规则的格式是: 例如: 依赖关系如下图: 注意: (1) 当我们为了执行命令而非创建目标文件时,就会使用伪目标比如...(5) 在工作目录按 "GNUmakefile、makefile、Makefile (推荐)" 顺序查找执行,或 -f 指定。...(8) 在makefile 常见的gcc/g++参数 -D 即条件编译; -static 使用静态库;注意 -L../lib -ldown 与 .....f fileName -n 显示待执行的命令,但不执行 Makefile组成 显式规则:生成、依赖文件,生成命令 隐含规则:make支持的自动推导功能, make –p 打印 变量定义:类C...vpath %.c # 取消该模式 vpath # 取消所有模式 VPATH 和 vpath 定义的搜索路径仅对 makefile 规则有效,对 gcc/g++ 命令行无效,比如不能用它定义命令行头文件搜索路径参数
“往下数”n行文字 「p」:将缓冲区内的字符贴到光标所在位置 //注意:y相关的操作与“p”配能完成复制粘贴 替换: 「r」:输入需要改成的字符,替换光标所在处的字符 「R」:切换成替换模式,输入可以替换光标所到之处的字符...,每次列10行 list/l 函数名:列出某个函数的源代码 info break/ info b :查看断点信息 print/p:打印表达式的值,通过表达式可以修改变量的值或者调用函数 display...示图: 修改: set var:修改变量的值 断点: break/b 行号:在某一行设置断点 break 函数名:在某个函数开头设置断点 delete breakpoints/d:删除所有断点...1、背景及概念 一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作...,如果找到则再根据那一个规则生成依赖文件 这就是整个make的依赖性,make会一层又一层地去找文件的依赖关系,直到最终编译出第一个目标文件 在找寻的过程中,如果出现错误,比如最后被依赖的文件找不到
基本概念 •目标 (Targets):在 Makefile 中,目标是要生成的文件或执行的操作的名称。目标可以是文件名,也可以是伪目标,用于执行特定任务而不生成文件。...•依赖项 (Dependencies):依赖项是与目标相关联的文件或其他目标,它们在目标生成之前必须存在或已经生成。•规则 (Rules):规则定义了如何生成目标以及生成目标所需的命令。...•命令 (Commands):命令是在生成目标时要执行的操作。命令必须以 Tab 键开头。•变量 (Variables):变量用于存储文本或命令,并可以在整个 Makefile 中重复使用。...Makefile 语法 一个基本的 Makefile 规则的语法如下: target: dependencies command •target:要生成的目标的名称。...这些函数可以在 Makefile 中用于各种目的,例如文件操作、文本处理和条件判断。 5.2 自动化依赖关系生成 通常,Makefile 中的依赖关系需要手动维护。
领取专属 10元无门槛券
手把手带您无忧上云