【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 规则。

目录
相关文章
|
16天前
|
安全 Android开发 iOS开发
Android vs. iOS:构建生态差异与技术较量的深度剖析###
本文深入探讨了Android与iOS两大移动操作系统在构建生态系统上的差异,揭示了它们各自的技术优势及面临的挑战。通过对比分析两者的开放性、用户体验、安全性及市场策略,本文旨在揭示这些差异如何塑造了当今智能手机市场的竞争格局,为开发者和用户提供决策参考。 ###
|
10天前
|
Java API Android开发
安卓应用程序开发的新手指南:从零开始构建你的第一个应用
【10月更文挑战第20天】在这个数字技术不断进步的时代,掌握移动应用开发技能无疑打开了一扇通往创新世界的大门。对于初学者来说,了解并学习如何从无到有构建一个安卓应用是至关重要的第一步。本文将为你提供一份详尽的入门指南,帮助你理解安卓开发的基础知识,并通过实际示例引导你完成第一个简单的应用项目。无论你是编程新手还是希望扩展你的技能集,这份指南都将是你宝贵的资源。
38 5
|
10天前
|
前端开发 JavaScript 测试技术
Android适合构建中大型项目的架构模式全面对比
Android适合构建中大型项目的架构模式全面对比
24 2
|
15天前
|
开发工具 Android开发 iOS开发
Android vs iOS:构建移动应用时的关键考量####
本文深入探讨了Android与iOS两大移动平台在开发环境、性能优化、用户体验设计及市场策略方面的差异性,旨在为开发者提供决策依据。通过对比分析,揭示两个平台各自的优势与挑战,帮助开发者根据项目需求做出更明智的选择。 ####
|
16天前
|
人工智能 Android开发
1024 云上见 构建AI总结助手,实现智能文档摘要 领罗马仕安卓充电器
1024 云上见 构建AI总结助手,实现智能文档摘要 领罗马仕安卓充电器
44 1
|
19天前
|
调度 Android开发 开发者
构建高效Android应用:探究Kotlin多线程优化策略
【10月更文挑战第11天】本文探讨了如何在Kotlin中实现高效的多线程方案,特别是在Android应用开发中。通过介绍Kotlin协程的基础知识、异步数据加载的实际案例,以及合理使用不同调度器的方法,帮助开发者提升应用性能和用户体验。
36 4
|
19天前
|
编解码 Android开发 UED
构建高效Android应用:从内存优化到用户体验
【10月更文挑战第11天】本文探讨了如何通过内存优化和用户体验改进来构建高效的Android应用。介绍了使用弱引用来减少内存占用、懒加载资源以降低启动时内存消耗、利用Kotlin协程进行异步处理以保持UI流畅,以及采用响应式设计适配不同屏幕尺寸等具体技术手段。
42 2
|
3天前
|
编解码 Java Android开发
通义灵码:在安卓开发中提升工作效率的真实应用案例
本文介绍了通义灵码在安卓开发中的应用。作为一名97年的聋人开发者,我在2024年Google Gemma竞赛中获得了冠军,拿下了很多项目竞赛奖励,通义灵码成为我的得力助手。文章详细展示了如何安装通义灵码插件,并通过多个实例说明其在适配国际语言、多种分辨率、业务逻辑开发和编程语言转换等方面的应用,显著提高了开发效率和准确性。
|
2天前
|
Android开发 开发者 UED
安卓开发中自定义View的实现与性能优化
【10月更文挑战第28天】在安卓开发领域,自定义View是提升应用界面独特性和用户体验的重要手段。本文将深入探讨如何高效地创建和管理自定义View,以及如何通过代码和性能调优来确保流畅的交互体验。我们将一起学习自定义View的生命周期、绘图基础和事件处理,进而探索内存和布局优化技巧,最终实现既美观又高效的安卓界面。
12 5
|
1天前
|
缓存 数据库 Android开发
安卓开发中的性能优化技巧
【10月更文挑战第29天】在移动应用的海洋中,性能是船只能否破浪前行的关键。本文将深入探讨安卓开发中的性能优化策略,从代码层面到系统层面,揭示如何让应用运行得更快、更流畅。我们将以实际案例和最佳实践为灯塔,引领开发者避开性能瓶颈的暗礁。
9 3