【Android构建篇】MakeFile语法< 3 >

简介: 对于一个看不懂Makefile构建文件规则的人来说,这个Makefile语法和shell语法是真不一样,但是又引用了部分shell语法,可以说是shell语法的子类,Makefile语法继承了它。和shell语法不一样,这个更难一点,而且不太容易懂,所以后续还会持续更新这篇文章。

四、Makefile 的实例


(1)执行多个目标

.PHONY: cleanall cleanobj cleandiff
cleanall : cleanobj cleandiff
        rm program
cleanobj :
        rm *.o
cleandiff :
        rm *.diff


上面代码可以调用不同目标,删除不同后缀名的文件,也可以调用一个目标(cleanall),删除所有指定类型的文件。


(2)编译C语言项目

edit : main.o kbd.o command.o display.o 
    cc -o edit main.o kbd.o command.o display.o
main.o : main.c defs.h
    cc -c main.c
kbd.o : kbd.c defs.h command.h
    cc -c kbd.c
command.o : command.c defs.h command.h
    cc -c command.c
display.o : display.c defs.h
    cc -c display.c
clean :
     rm edit main.o kbd.o command.o display.o
.PHONY: edit clean


五、Makefile的特殊字符


在 Makefile 文件中,存在一些特殊字符,它们的含义不同于普通字符。下面列举了一些常见的特殊字符及其含义:


1.# 注释符号:用于在规则中添加注释,以提高可读性。


2.= 等号:用于定义变量,并将值赋给变量。


3.:= 冒号等于号:与等号类似,也用于定义变量。

不同之处在于,当变量被声明时,其值会立即求解并保存。

这意味着变量的值在 Makefile 的执行过程中只计算一次。


4.+= 加等号:用于向现有变量添加内容而不是覆盖它的值。

此操作相当于将旧值和新值连接成一个字符串。


5.?= 问号等于号:类似于等号和冒号等于号,也用于定义变量。

与两者不同的是,如果变量已经被定义,则该操作不会覆盖它的值。


6.$ 特殊字符:用于引用变量。可以使用 $(…) 或 ${…} 表示变量的值,也可以使用$$表示一个普通的$字符。


7.@ 特殊符号:在命令行前加上@符号可以阻止其被显示出来。这在运行一些特别长或者复杂的命令时非常有用。


8.- 特殊符号:可以将命令的返回结果忽略,并继续执行 Makefile 中的其他规则。


9.% 特殊字符:用于表示模式匹配,在规则中可以使用 % 来通配符代替文件名中的一部分。

例如,%.c 表示任意以 .c 结尾的文件名。


10.| 管道符号:用于定义目标的依赖关系,并指定要在所有依赖项都更新后才运行的命令。与普通的依赖关系不同,使用管道符号定义的依赖项不会被视为Makefile 中的真正目标。


11.:: 特殊符号:如果两个冒号(::)出现在规则的目标后面,则表示该规则具有“双冒号”语义。这种语义下,执行命令时不会涉及到时间戳和依赖项的判断,而只会执行规则中的命令。这种类型的规则被称为 “标签语句”(label statement),通常用于在 Makefile 文件中添加注释或执行一些额外的操作。


12.· 特殊字符:和 % 类似,用于表示通配符,可以匹配任意长度的字符串。用法类似于 Shell 中的通配符,例如 *.c 表示以 .c 结尾的任意文件名。


13.[] 特殊字符:用于表示字符集匹配,可以指定匹配一组字符中的任意一个。例如,[abcd].c 表示 a.c、b.c、c.c 或 d.c 这几个文件中的任意一个。


14.^ 特殊字符:用于否定整个字符集,表示不匹配其中的任何一个字符。例如,[^abc].c 表示不匹配所有以 a、b、c 中任意一个字符开头,并以 .c 结尾的文件名。


15.() 特殊符号:用于分组,在规则中限定一个或多个表达式的作用范围。这对于在匹配模式时使用多个通配符非常有用,可以确保正确匹配所需的部分。

这些特殊字符在 Makefile 文件中都是有特殊含义的,熟练掌握它们的用法和含义,有助于编写更清晰和可维护的 Makefile 规则。

目录
相关文章
|
26天前
|
安全 Android开发 iOS开发
Android vs. iOS:构建生态差异与技术较量的深度剖析###
本文深入探讨了Android与iOS两大移动操作系统在构建生态系统上的差异,揭示了它们各自的技术优势及面临的挑战。通过对比分析两者的开放性、用户体验、安全性及市场策略,本文旨在揭示这些差异如何塑造了当今智能手机市场的竞争格局,为开发者和用户提供决策参考。 ###
|
20天前
|
Java API Android开发
安卓应用程序开发的新手指南:从零开始构建你的第一个应用
【10月更文挑战第20天】在这个数字技术不断进步的时代,掌握移动应用开发技能无疑打开了一扇通往创新世界的大门。对于初学者来说,了解并学习如何从无到有构建一个安卓应用是至关重要的第一步。本文将为你提供一份详尽的入门指南,帮助你理解安卓开发的基础知识,并通过实际示例引导你完成第一个简单的应用项目。无论你是编程新手还是希望扩展你的技能集,这份指南都将是你宝贵的资源。
46 5
|
20天前
|
前端开发 JavaScript 测试技术
Android适合构建中大型项目的架构模式全面对比
Android适合构建中大型项目的架构模式全面对比
39 2
|
25天前
|
开发工具 Android开发 iOS开发
Android vs iOS:构建移动应用时的关键考量####
本文深入探讨了Android与iOS两大移动平台在开发环境、性能优化、用户体验设计及市场策略方面的差异性,旨在为开发者提供决策依据。通过对比分析,揭示两个平台各自的优势与挑战,帮助开发者根据项目需求做出更明智的选择。 ####
|
26天前
|
人工智能 Android开发
1024 云上见 构建AI总结助手,实现智能文档摘要 领罗马仕安卓充电器
1024 云上见 构建AI总结助手,实现智能文档摘要 领罗马仕安卓充电器
52 1
|
29天前
|
调度 Android开发 开发者
构建高效Android应用:探究Kotlin多线程优化策略
【10月更文挑战第11天】本文探讨了如何在Kotlin中实现高效的多线程方案,特别是在Android应用开发中。通过介绍Kotlin协程的基础知识、异步数据加载的实际案例,以及合理使用不同调度器的方法,帮助开发者提升应用性能和用户体验。
42 4
|
29天前
|
编解码 Android开发 UED
构建高效Android应用:从内存优化到用户体验
【10月更文挑战第11天】本文探讨了如何通过内存优化和用户体验改进来构建高效的Android应用。介绍了使用弱引用来减少内存占用、懒加载资源以降低启动时内存消耗、利用Kotlin协程进行异步处理以保持UI流畅,以及采用响应式设计适配不同屏幕尺寸等具体技术手段。
47 2
|
1天前
|
搜索推荐 Android开发 开发者
探索安卓开发中的自定义视图:打造个性化UI组件
【10月更文挑战第39天】在安卓开发的世界中,自定义视图是实现独特界面设计的关键。本文将引导你理解自定义视图的概念、创建流程,以及如何通过它们增强应用的用户体验。我们将从基础出发,逐步深入,最终让你能够自信地设计和实现专属的UI组件。
|
3天前
|
Android开发 Swift iOS开发
探索安卓与iOS开发的差异和挑战
【10月更文挑战第37天】在移动应用开发的广阔舞台上,安卓和iOS这两大操作系统扮演着主角。它们各自拥有独特的特性、优势以及面临的开发挑战。本文将深入探讨这两个平台在开发过程中的主要差异,从编程语言到用户界面设计,再到市场分布的不同影响,旨在为开发者提供一个全面的视角,帮助他们更好地理解并应对在不同平台上进行应用开发时可能遇到的难题和机遇。
|
5天前
|
XML 存储 Java
探索安卓开发之旅:从新手到专家
【10月更文挑战第35天】在数字化时代,安卓应用的开发成为了一个热门话题。本文旨在通过浅显易懂的语言,带领初学者了解安卓开发的基础知识,同时为有一定经验的开发者提供进阶技巧。我们将一起探讨如何从零开始构建第一个安卓应用,并逐步深入到性能优化和高级功能的实现。无论你是编程新手还是希望提升技能的开发者,这篇文章都将为你提供有价值的指导和灵感。