
【Makefile GCC 专栏】
文章平均质量分 69
嵌入式开发 Makefile 编译系列文章
主公讲 ARM
竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【ARM 嵌入式 编译 Makefile 系列 2.2 - Makefile: 打印Makefile 中的行号】
Makefile 中的每个规则的命令都是在独立的 shell 实例中运行的,所以如果你想要跟踪每个规则执行时的行号,需要在每个规则中添加类似的命令。但请注意,这只会打印出 Makefile 中规则的行号,而不是源代码的行号。这种做法主要用于调试 Makefile 本身。如果你想在 Makefile 的每个规则执行时打印出当前的行号,你可以使用 Makefile 的特殊变量。在上面的 Makefile 片段中,会搜索 Makefile 中定义。,以及 shell 命令。原创 2024-01-02 21:55:29 · 645 阅读 · 0 评论 -
【ARM 嵌入式 编译 Makefile 系列 19 - Makefile 多层依赖使用的详细介绍】
在 Makefile 中,通常定义一系列的目标(targets)来指定如何构建和管理项目。定义是一个递归的通配符函数,用来搜索 Makefile 变量所指定的目录及其所有子目录中匹配给定模式的文件。是用户定义的目标,它们的具体命令和动作将取决于你的具体需求和项目的结构。在实际的 Makefile 中,它们可以是任何你需要的预处理和构建步骤。命令,没有指定任何目标时,make 将尝试构建 Makefile 中的第一个目标。目标,该目标负责调用每个子目录中的 Makefile。目标依赖于每个子目录的目标。原创 2023-11-23 15:33:18 · 1344 阅读 · 0 评论 -
【ARM 嵌入式 编译 Makefile 系列 18 -- Makefile 中的 export 命令详细介绍】
在 Makefile 中,export命令用于将变量从 Makefile 导出到由 Makefile 启动的子进程的环境中。这通常在你需要在 Makefile 中设置环境变量,并确保这些变量在编译过程中启动的任何子 shell 或程序中都是可用的情况下使用。当你在 Makefile 中导出一个变量时,任何由 make 启动的子进程(比如调用的 shell 脚本或其他程序)都将能够访问该环境变量。原创 2023-11-23 10:43:21 · 3955 阅读 · 0 评论 -
【ARM 嵌入式 编译 Makefile 系列 15.1 -- arm gcc 与 Makefile 一块使用示例】
在没有指定具体目标的情况下,make命令默认执行第一个目标,这里就是。:定义了一个名为CC的变量,表示编译器,这里使用的是ARM GCC编译器;例如,你可能需要修改编译器路径、编译参数、目标文件名、源文件列表等。变量指定的编译参数,编译所有依赖文件,输出为目标文件;的变量,表示目标文件,编译后的可执行文件名为。,你需要根据你自己的项目环境和需求来修改这个。的变量,表示编译参数,如指定CPU类型为。目标的命令,用于删除编译生成的。,用于清理编译生成的文件;命令,那么会删除编译生成的。变量指定的编译器,使用。原创 2023-10-07 18:02:49 · 571 阅读 · 0 评论 -
【ARM 嵌入式 编译 Makefile 系列 7 - Makefile函数调用 findstring命令详细介绍】
这个函数用于在一个字符串中查找一个子字符串。",findstring函数将返回"函数是大小写敏感的,所以。变量中包含子字符串"原创 2023-08-17 09:22:02 · 1051 阅读 · 0 评论 -
【ARM 嵌入式 编译 Makefile 系列 17 - Makefile 函数 wildcard 使用详细介绍】
wildcard函数是Makefile中的一个内建函数,用于获取符合特定模式的文件名列表。例如,会获取当前目录下所有以.c为扩展名的文件列表。一个更具体的例子:假设我们有一个目录,其中包含多个C源文件,我们可以使用wildcard函数来获取这些源文件的列表,然后生成目标文件列表,并编写规则来编译这些源文件。all:在这个例子中,会获取所有.c文件,然后我们使用模式替换来生成所有.o文件。规则%.o: %.c表示每个.o文件都依赖于同名的.c文件。如果某个.c文件发生了改变,那么对应的.o。原创 2023-08-18 09:28:30 · 1643 阅读 · 0 评论 -
【ARM 嵌入式 编译 Makefile 系列 11 - Makefile subst 函数详细介绍】
函数只进行字符串替换,它不会修改文件名或进行任何文件操作。如果你想要修改文件名或进行其他类型的替换,你可能需要在Makefile中调用外部的shell命令或脚本。是Makefile的一个内建函数,它用于在文本中替换字符串。时,将会在命令行中打印出。字符串,并将它们替换为。原创 2023-08-17 09:24:34 · 482 阅读 · 0 评论 -
【ARM 嵌入式 编译 Makefile 系列 13 - Makefile eval 函数详细介绍】
函数非常强大,它可以用于动态创建复杂的make规则,或者在运行时修改Makefile的行为。是Makefile的一个内建函数,它用于在Makefile中动态创建新的。函数也需要谨慎,因为它可能会使你的Makefile变得难以理解和维护。可以用来执行更复杂的操作,例如创建动态规则、执行复杂的字符串处理等。是 Makefile 中的两个内建函数,可以用来定义并执行宏。时,Make会找到这个新添加的规则,并执行它,打印出"函数来执行这个宏,这会创建一个新的变量。的变量,它包含一个新的。规则或者定义的变量。原创 2023-08-17 09:25:46 · 427 阅读 · 0 评论 -
【ARM 嵌入式 编译 Makefile 系列 1 - Makefile 如何调用 shell 脚本】
在Makefile中,我们可以在命令部分调用shell脚本。Makefile中的命令部分是在shell中执行的,所以你可以在其中使用任何有效的shell命令。,在Makefile中,每一行命令默认是在一个新的shell进程中执行的。如果你想在同一个shell进程中执行多行命令,你可以使用反斜线(函数,你可以使用它在Makefile中执行shell命令并获取结果。另外,Makefile还提供了一个内置的。)将命令分成多行,或者在一行中用分号(时,列出当前目录下的所有文件。这个Makefile将在执行。原创 2023-08-16 16:37:27 · 1768 阅读 · 0 评论 -
【ARM 嵌入式 编译 Makefile 系列 2 - Makefile 如何打印信息】
在Makefile中,我们可以使用echo命令来打印信息。这种方法适用于大多数的 UNIX shell,包括bash、sh、ksh、zsh等。在 Makefile 中的规则部分,你可以添加echo命令来打印一些信息。这个Makefile将在执行make allecho命令的输出默认会被 Make 显示出来。如果你想要静默地(即不显示命令自身)打印信息,你可以在命令前面加上一个all:这种情况下,make all命令将只会显示编译程序的输出,不会显示echo命令本身。同时。原创 2023-08-16 16:38:27 · 1510 阅读 · 0 评论 -
【ARM 嵌入式 编译 Makefile 系列 3 - Makefile filter 与 filter-out 详细介绍】
filterfilter-out是在Makefile中常用的函数。filter:这个函数接受两个参数,第一个参数是一个模式列表,第二个参数是一个单词列表。它会返回与模式列表匹配的所有单词。all:执行make all后,会在命令行中打印foo1.cfoo2.c。filter-out:这个函数和filter函数的功能正好相反,它返回与模式列表不匹配的所有单词。all:执行make all后,会在命令行中打印bar.c。bar.c。原创 2023-08-16 16:55:06 · 858 阅读 · 0 评论 -
【ARM 嵌入式 编译 Makefile 系列 4 - Makefile函数调用 call 命令详细介绍】
call:这个函数用于调用一个用户定义的函数,它的第一个参数是函数名,剩下的参数会作为参数传递给函数。" endefall:" endefall:执行make all后,会在命令行中打印。原创 2023-08-16 17:01:33 · 366 阅读 · 0 评论 -
【ARM 嵌入式 编译 Makefile 系列 9 - Makefile (“:=”,“ +=”, “?=”,“=” | CFLAGS|常见自动变量)详细介绍】
CFLAGS是用于C编译器的选项的Makefile变量。CFLAGS变量通常包含应用于C编译器的标志,如优化级别,警告级别等。例子1在这个例子中,-Wall选项告诉编译器生成所有警告,-O2选项告诉编译器使用第二级优化。当然,CFLAGS可以设置为你需要的任何值。在Makefile中你可以通过宏定义来控制源程序的编译。只要在Makefile中的CFLAGS中通过选项-D来指定你于定义的宏即可。或在这个例子中,CFLAGS被设置为-I.,-I选项的作用是指定包含文件的搜索路径,表示在当前目录下搜索。原创 2023-08-17 09:23:32 · 533 阅读 · 0 评论 -
【ARM 嵌入式 编译 Makefile 系列 5 - Makefile函数调用patsubst命令详细介绍】
这个变量通常被用在 Makefile 的编译规则中,来指定所有的。文件,这样你就可以使用一个规则来构建所有的目标文件。举例来说,如果当前目录下有。后,会在命令行中打印。原创 2023-08-16 22:22:23 · 300 阅读 · 0 评论 -
【ARM 嵌入式 编译 Makefile 系列 14 - Makefile abspath 函数详细介绍】
是 makefile中的一个函数,它用来将相对路径转换成绝对路径。这在编程中是非常有用的,比如当你需要引用其他目录下的文件时,使用绝对路径可以更准确地找到文件的位置。"这个相对路径转换为绝对路径。一个或多个文件的相对路径或者绝对路径。:如果给定的路径不存在或者无法访问,在这个例子中,我们将"函数将返回空字符串。原创 2023-08-17 09:26:32 · 907 阅读 · 0 评论 -
【ARM 嵌入式 编译 Makefile 系列 15 - Makefile define 宏与调用宏函数详细介绍】
在Makefile中,可以通过关键字来定义一个多行的宏(也称为变量)。这种宏定义通常用于定义一个复杂的命令序列,然后在其他地方调用。以下是定义一个宏的例子:以上代码定义了一个叫做的宏,它执行的操作是打印出""。定义了宏之后,你可以在其他地方使用函数来调用这个宏。例如:以上代码定义了一个all目标,当执行make all命令时,会调用宏,打印出""。在Makefile的宏中,你也可以定义带参数的宏。例如:Makefile 修改好后,执行 make all ,发现会报出下面问题:如果修改为下面内容则不会原创 2023-08-17 09:28:07 · 841 阅读 · 0 评论 -
【ARM 嵌入式 编译 Makefile 系列 2.1 - Makefile info,warn, error 打印详细介绍】
它不会像echo那样等到目标被执行时才打印,而是在。例如,假设我们在Makefile中定义了一个变量。时打印一些警告信息,并继续解析和执行。时打印一些错误信息,并停止解析和执行。,并且我们想要打印其值,我们可以采用以下。命令时,我们通常在命令前面加上一个。,你可能需要用引号来保护它们,例如。,而不是目标执行阶段打印信息的,在Makefile中,我们可以用。注意,我们在命令前面加上。和执行all目标时,打印出"",然后继续解析和执行。",然后停止解析和执行。,只会打印出命令的输出。上面的两行命令分别在解析。原创 2023-08-16 16:39:17 · 1502 阅读 · 0 评论 -
【ARM 嵌入式 编译 Makefile 系列 12 - Makefile notdir 函数详细介绍】
是Makefile的一个内建函数,它用于从一列文件名中剥去目录部分。,如果你的文件名列表中包含了空格或者特殊字符,你可能需要用引号来保护它们,例如。函数剥去这些文件的目录部分,得到的结果保存在。变量包含了两个完整的文件路径。是你想要处理的文件名列表。时,将会在命令行中打印出。原创 2023-08-17 09:25:06 · 467 阅读 · 0 评论 -
【ARM 嵌入式 编译 Makefile 系列 6 - Makefile函数调用 origin 命令详细介绍】
makefile origin 学习原创 2023-08-16 22:24:14 · 341 阅读 · 0 评论 -
【ARM 嵌入式 编译 Makefile 系列 15 - Makefile 标签(targets) 使用详细介绍】
program.o 标签依赖 program.c 和 program.h 两个文件,生成 program.o 文件。program 标签依赖 program.o 和 utils.o 两个文件,生成 program 文件。utils.o 标签依赖 utils.c 和 program.h 两个文件,生成 utils.o 文件。在这个例子中,program, program.o, utils.o 和 clean 就是标签。clean 标签没有依赖项,它的作用是执行 rm 命令来删除生成的文件。原创 2023-09-06 14:28:22 · 415 阅读 · 0 评论 -
【ARM 嵌入式 编译 Makefile 系列 10 - Makefile sort 函数详细介绍】
如果你想要进行数字排序,你可能需要在Makefile中调用外部的shell命令或脚本。是Makefile的一个内建函数,它用于将列表中的词进行排序,并删除重复的词。函数将其排序并删除重复的单词,结果保存在。是一个包含重复单词的列表。中的单词排序并去重后的结果。是你想要排序的单词列表。时,将会在命令行中打印出。函数会将列表中的单词。原创 2023-08-17 09:24:04 · 501 阅读 · 0 评论 -
【ARM 嵌入式 编译 Makefile 系列 8 - Makefile函数调用 ifeq 和 ifneq 条件指令详细介绍】
指令的参数可以是变量,也可以是字符串。如果是字符串,你需要用引号将它们括起来,例如。在Makefile中,你可以使用。条件指令来测试变量的值。在这个例子中,如果变量。在这个例子中,如果变量。原创 2023-08-17 09:22:46 · 582 阅读 · 0 评论 -
【ARM 嵌入式 编译 Makefile 系列 16 - Makefile 伪目标.PHONY 与 FORCE 详细介绍】
当该文件不存在,或者其依赖的文件有更新时,make 命令就会执行目标所对应的命令。但有时,我们定义的目标并不是一个真实的文件,而是一个执行某些命令的名称。不仅可以防止与文件名冲突,还可以让 make 命令在每次调用时都执行伪目标的命令,而不是仅在伪目标的依赖文件有更新时才执行。,那么make命令会忽略这个目标的文件名,即使在文件系统中存在同名的文件,make命令也会每次都执行这个目标的命令。则通常是用户自定义的一个目标,它没有命令,也没有依赖,所以它总是被认为是需要更新的。命令也会每次都尝试删除所有的。原创 2023-08-17 09:30:36 · 1077 阅读 · 0 评论