迅为IMX6ULL开发板Ubuntu下C编程入门(二)_第1页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、迅为imx6ull开发板ubuntu下c编程入门(二)在上图可以看到变量 ceshi2 的值是 temp,也就是变量 ceshi1 最后一次的赋值。2. “ := ” 赋值符我们修改“=”赋值符中的代码,其次行的“=”改成“:=”,代码如下:1 ceshi1 = test2 ceshi2 := $(ceshi1)3 ceshi1 = temp45 out:6 echo ceshi2(ceshi2)我们在终端输入“make out”指令,如下图所示:file:/c:usersadmini1appdatalocaltempksohtml10068wps4.png我们可以看到上图的运行结果输出变量

2、ceshi2 的值是 test,虽然在第三行我们修改了变量 ceshi1 的值,通过本试验我们可以看到“:=”赋值符的功能了。3. “ ?= ” 赋值符ceshi ?= test“?=”赋值符的作用是假如前面没有给变量 ceshi 赋值,那么变量就赋值“test”,假如前面已经赋值了,就用法前面的赋值。4. “ += ” 赋值符objs = main.oobjs += calc.o上面的脚本最后变量 objs 的值是“main.o calc.o”,“+=”赋值符的功能是实现变量的追加。3.4.3 条件推断用法条件推断,可以让 make 按照运行时的不怜悯况挑选不同的执行分支。条件表达式可以是比

3、较变量的值,或是比较变量和常量的值。其语法有下面两种:1.条件为真时执行的脚本endif2.条件为真时执行的脚本else条件为假时执行的脚本endif条件比较用到的比较关键字有:ifeq、ifneq、ifdef、ifndef。ifeq 表示假如比较相等,语法如下:ifeq(, )ifneq 表示假如不相等,语法如下:ifneq(, )ifdef 表示假如定义了变量,语法如下:ifdef ifndef 表示假如没有定义变量,语法如下:ifndef 3.4.4 用法函数在 makefile 中可以用法函数来处理变量,从而让我们的指令或是规章更为的灵便和具有智能。make 所支持的函数也不算无数,不

4、过已经足够我们的操作了。函数调用后,函数的返回值可以当做变量来用法。函数的调用很像变量的用法,也是以“$”来标识的,语法如下:$( )或者:$ 函数名和参数集合之间以空格分隔,参数集合的参数通过逗号分隔。函数调用以“$”开始,以圆括号或花括号把函数名和参数括起。感觉很像一个变量。函数中的参数可以用法变量。为了风格的统一,函数和变量的括号最好一样,如用法“$(subst a,b,$(x)”这样的形式,而不是“$(subst a,b,$x)”的形式。由于统一会更清晰,也会削减一些不须要的棘手。接下来我们介绍几个常用的函数,其它的函数可以参考文档跟我一起写 makefile。t 1.subst 函数

5、$(subst ,)此函数的功能是把字串中的字符串替换成,函数返回被替换过后的字符串。如下示例:$(subst ee,ee,feet on the street)以上脚本实现把字符串“feet on the street”中的“ee”字符串替换成“ee”字符串,替换后的字符串为“feet on the street”。. 2. t patsubst 函数$(patsubst ,)此函数的功能是查找中的单词(单词以“空格”、“tab”或“回车”“换行”分隔)是否符合模式,假如匹配的话,则以替换。这里可以包括通配符“%”,表示随意长度的字串。假如中也包含“%”,那么中的这个“%”将是中的那个“%”

6、所代表的字串。(可以用“”来转义,以“%” 来表示真切含义的“%”字符)。函数返回被替换过后的字符串。如下示例:$(patsubst %.c,%.o,x.c bar.c)以上脚本实现把字串“x.c bar.c”符合模式%.c的单词替换成%.o,返回结果是“x.o bar.o”3.strip 函数$(strip )此函数的功能是去掉字串中开始和结尾的空字符,函数返回被去掉空格的字符串值。如下示例:$(strip a b c )以上脚本实现把字串“a b c ”去掉开始和结尾的空格,结果是“a b c”。. 4. g findstring 函数$(findstring ,)此函数的功能是在字串中查

7、找字串,假如找到,那么返回,否则返回空字符串,如下示例:$(findstring a,a b c)$(findstring a,b c)以上脚本,第一个返回“a”字符串,其次个返回空字符串。r 5.dir 函数$(dir )此函数的功能是从文件名序列中取出名目部分。名目部分是指最后一个反斜杠(“/”)之前的部分。假如没有反斜杠,那么返回“./”。返回文件名序列的名目部分,如下示例:$(dir src/foo.c hacks)以上脚本运行结果返回“src/”。. 6. r notdir 函数$(notdir )此函数的功能是从文件名序列中取出非名目部分。非名目部分是指最后一个反斜杠(“/”)之后

8、的部分,返回文件名序列的非名目部分,如下示例:$(notdir src/foo.c)以上脚本返回字符串“foo.c”. 7. h foreach 函数$(foreach ,)此函数的功能是把参数中的单词逐一取出放到参数所指定的变量中,然后再执行所包含的表达式。每一次会返回一个字符串,循环过程中,的所返回的每个字符串会以空格分隔,最后当囫囵循环结束时,所返回的每个字符串所组成的囫囵字符串(以空格分隔)将会是 foreach 函数的返回值。所以,最好是一个变量名,可以是一个表达式,而中普通会用法这个参数来依次枚举中的单词。如下示例:names := a b c dfiles := $(foreac

9、h n,$(names),$(n).o)以上脚本实现$(name)中的单词会被挨个取出,并存到变量“n”中,“$(n).o”每次按照“$(n)”计算出一个值,这些值以空格分隔,最后作为 foreach 函数的返回,所以$(files)的值是“a.o b.o c.o d.o”。(注重,foreach 中的参数是一个暂时的局部变量,foreach 函数执行完后,参数的变量将不在作用,其作用域只在 foreach 函数当中)。3.4.5 在规章中用法通配符假如我们想定义一系列比较类似的文件,我们很自然地就想起用法通配符。make 指令支持三种通配符:“*”,“?”和“.”,这是和 unix 的 b-

10、shell 是相同的。“”字符在文件名中也有比较特别的用途。假如是“/test”,这就表示当前用户根名目下的 test 文件。而“admin/test”则表示用户 admin 根名目下的 test 文件。通配符代替了一系列的文件,如“*.c”表示全部后缀为 .c 的文件。一个需要我们注重的是,假如我们的文件名中有通配符,如:“*”,那么可以用转义字符“”,如“*” 来表示真切的“*”字符,而不是随意长度的字符串。下面我们来看几个详细的示例:clean:rm -rf *.o上面这个示例解释通配符可以在规章的指令中用法。print: *.c上面这个示例解释通配符可以在规章的依靠中用法objects = *.o上面这个示例表示了,通符同样可以用在变量中。并不是说*.o会绽开,objects 的值就是“*.o”。makefile中的变量其实就是 c/c+中的宏。假如你要让通配符在变量中绽开,也就是让 objects 的值是全部.o的文件名的集合,那么,你可以这样:ob

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论