网站建设服务费费计入什么科目,福建永安建设局网站,南京广告公司招聘信息,网站后台作用抓住基础#xff0c;学习更多技术#xff0c;迎接挑战#xff0c;加qq#xff1a;1126137994 微信#xff1a;liu1126137994 一起学习更多技术~
上一篇文章学习了makefile中的预定义变量的使用#xff0c;今天来继续学习makefile中的变量#xff01;
1、变量值的替换 …抓住基础学习更多技术迎接挑战加qq1126137994 微信liu1126137994 一起学习更多技术~
上一篇文章学习了makefile中的预定义变量的使用今天来继续学习makefile中的变量
1、变量值的替换
变量值的替换 *使用指定字符串替换变量值中的后缀字符串 -语法格式$(var:ab) 或${var:ab}. 注意事项
替换表达式中不能有任何的空格make中支持使用${}对变量进行取值 举个例子
src : a.o b.o c.o
obj : $(src:cco)test:echo obj $(obj)
变量的模式替换
*使用%保留变量值中的指定字符替换其他字符 -语法格式$(var:a%bx%y) 或者 ${var:a%bx%y}
注意事项
替换表达式中不能有任何空格make中支持使用${}对变量进行取值
举个例子深刻理解一下
src: a1b.c a2b.c a3b.c
obj: $(src:a%b.cx%y)test:echo obj $(obj)
下面给出一个简单的示例来理解上面的语法
src1 : a.cc b.cc c.cc
obj1 : $(src1:cco)test :echo obj1 $(obj1)src2 : a11b.c a22b.c a33b.c
obj2 : $(src2:a%b.cx%y)test2 :echo obj2 $(obj2)
输入make test 显示obj1 a.o b.o c.o 输入make test2 显示obj2 x11y x22y x33y
规则中的模式替换 意义 通过target-pattern 从tagets中匹配子目标再通过prereq-pattern从子目标生成依赖进而构成完整的规则
下面是一个规则中的模式替换案例
OBJS : func.o main.o
$(OBJS) : %.o : %.cgcc -o $ -c $^
等价于下面的
func.o : func.cgcc -o $ -c $^
main.o : main.cgcc -o $ -c $^
下面看一个规则中的模式替换的案例 main.c程序 extern void foo();int main()
{foo();return 0;
} func.c程序
#include stdio.hextern char* g_hello;void foo()
{printf(void foo() : %s\n, g_hello);
}const.c程序
const char* g_hello hello makefile;
上述三个程序为源程序编译他们的makefile文件为 CC : g
TARGET : hello-makefile.out
OBJS : func.o main.o const.o$(TARGET) : $(OBJS)$(CC) -o $ $^$(OBJS) : %.o : %.c$(CC) -o $ -c $^.PHONY : rebuild clean allrebuild : clean allall : $(TARGET)clean :$(RM) *.o $(TARGET)
输入make进行编译 显示g -o hello-makefile.out func.o main.o const.o
执行生成的可执行文件 ./hello-makefile.out 显示 void foo() : hello makefile
2、变量值的嵌套引用
变量值的嵌套引用 *一个变量名之中可以包含对其他变量的引用 *嵌套引用的本质是用一个变量表示另外一个变量
命令行变量 *运行make时在命令行定义变量 *命令行变量默认覆盖makefile中定义的变量
override关键字 *用于指示makefile中定义的变量不能被覆盖 *变量的定义和赋值都需要用override关键字
define关键字 *用于在makefile中定义多行变量 *多行变量的定义从变量名开始到endef结束 *可使用override关键字防止定义的变量被覆盖 *define定义的变量等价于使用 “” 定义的变量递归赋值
下面给出一个例子来理解上述的语法理论 hm : hello makefileoverride var : override-testdefine foo
Im fool!
endefoverride define cmdecho run cmd ls ...ls
endeftest :echo hm $(hm)echo var $(var)echo foo $(foo)${cmd}输入make显示
3、总结
变量值的替换$(var:ab) 或者 ${var:ab} 变量的模式替换$(var:a%bx%y) 或者 ${var:a%bx%y}makefile支持将模式替换直接用在规则中makefile中的变量值可以嵌套使用命令行中定义的变量可以覆盖makefile中的变量override用于指示makefile中的变量不能被覆盖define用于makefile中定义值为多行的变量
想一起探讨以及获得各种学习资源加我 qq1126137994 微信liu1126137994 可以共同交流关于嵌入式操作系统C语言C语言数据结构等技术问题。
本学习记录完全来源于狄泰软件学院的相关课程可以加我q1126137994或者Q群199546072 给你推荐更多学习课程。