首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Makefile教程

语法规则如下: target:prerequisites command 其中,target需要生成的目标,prerequisites依赖项,commandmake需要执行的命令(任意的Shell...显式规则说明了,如何生成一个或多个的目标文件。这是由Makefile的书写者明显指出要生成的文件,文件的依赖文件,生成的命令。 2.隐晦规则。...那么如何将shell的for循环写成一行呢?...此两者均为通配符,但更准确的讲,%Makefile规则通配符,用于规则描述,*扩展通配符,用于扩展。...直接执行clean这个伪目标依赖的命令。 (2)使用.PHONY指定伪目标可以改善性能。因为PHONY目标并非是由其它文件生成的实际文件,没有依赖项,make 会跳过依赖项的搜索和依赖项的更新检查。

3.9K53

Makefile学习1

目标依赖是指生成这个可执行文件所依赖的源文件,如 hello.c。 而命令则是如何将这些目标依赖生成对应的目标,一般是gcc命令、链接命令、objcopy命令,一些shell命令等。...规则中也可以没有命令,仅仅包含目标目标依赖,仅仅用来描述一种依赖关系,但一个规则中一定要有一个目标。 默认目标 一个Makefile文件里通常会有多个目标,一般会选择第一个作为默认目标。...make是根据时间戳来判断一个规则中的目标依赖文件是否有更新。...应用: 立即展开变量一般用在规则中的目标目标依赖中。make在解析Makefile阶段,需要这些变量有确切的值来构建依赖关系树。...这种变量一般称为自动变量,自动变量是局部变量,作用域范围在当前的规则内,它们分别代表不同的含义: $@:目标 $^:所有目标依赖 $<:目标依赖列表中的第一个依赖 $?

31610
您找到你想要的搜索结果了吗?
是的
没有找到

Linux中Makefile文件详解

$(OBJS): 中间文件的生成规则,告诉 Make 如何生成中间目标文件。 %.o: %.c: 通用规则,告诉 Make 如何将 .c 文件编译成对应的 .o 文件。...注意事项 空格问题: Makefile 使用 Tab 键而不是空格来缩进规则。 文件依赖Makefile 的核心是文件之间的依赖关系,确保每个目标依赖于正确的文件。...类似地,main.o 依赖于 main.c,utils.o 依赖于 utils.c。 6. 自动变量 Makefile 中有一些特殊的变量,称为自动变量,它们在规则的命令中使用,表示一些特定的信息。...一些常用的自动变量有: $@: 表示目标文件的名字。 $<: 表示规则中的第一个依赖文件的名字。 $^: 表示规则中所有的依赖文件的名字,用空格分隔。...基本结构 Makefile 文件由一系列规则变量组成。每个规则描述了一个或多个目标文件的生成方式。

23710

Linux嵌入式开发——Makefile基本语法

但是如果依赖文件集合更新了,那么目标也要更新,比如你看的书换了一本,那么这个读书笔记自然也要更新。接下来,我们来分析一下上篇文章的Makefile文件里面的代码。...首先更新第一条规则中的 main,我们一般把第一条规则目标当作默认目标,只要默认目标更新了那 么就认为 Makefile 的工作完成了。...然后make 会查找以这三个.o 文件目标规则并执行。以 main.o 例,发现更新 main.o 的是第二条规则,因此会执行第二条规则,其它两个.o 文件同理。...当找到 Makefile 文件以后就会按照 Makefile 中定义的规则去编译生成最终的目标文件。 当发现目标文件不存在,或者目标依赖的文件比目标文件新的话就会执行后面的命令来更新目标。...$% 当目标是函数库的时候表示规则中的目标成员名,如果目标不是函数库文件,那么其值空。

1.4K20

Linux 下的make命令与Makefile

如果这些依赖自身也是目标,继续这些依赖扫描Makefile 建立其依赖关系,然后编译它们。...因为make的“隐含规则”功能会自动我们自动去推导这两个目标依赖目标和生成命令。make会在自己的“隐含规则”库中寻找可以用的规则,如果找到,那么就会使用。如果找不到,那么就会报错。...常用的隐含规则如下: 1. 编译C程序的隐含规则。 .o 的目标依赖目标会自动推导.c ,并且其生成命令是 (CFLAGS) 2. 编译C++程序的隐含规则。....o 的目标依赖目标会自动推导.cc 或是.C ,并且其生成命令是 (CFLAGS) 。 3. 编译Pascal程序的隐含规则。....o 的目标依赖目标会自动推导.p ,并且其生成命令是 隐含规则使用的变量 在隐含规则中的命令中,基本上都是使用了一些预先设置的变量

10.1K20

makefile

5、所有的目标文件创建依赖关系链。 6、根据依赖关系,决定哪些目标要重新生成。 7、执行生成命令。 1-5步第一个阶段,6-7第二个阶段。...第一个非注释行指定 test.o 目标,并且依赖于 test.c 和 test.h 文件。随后的行指定了如何从目标依赖的文件建立目标。...Makefile中的变量可以使用在“目标”,“依赖目标”,“命令”或Makefile的其它部分中。...如果目标不是函数库文件(Unix下是[.a],Windows下是[.lib]),那么,其值空。 $< ——依赖目标中的第一个目标名字。...模式规则看起来非常类似于正则规则,但在目标名称的前面多了一个 % 号,同时可用来定义目标依赖文件之间的关系,例如下面的模式规则定义了如何将任意一个 X.c 文件转换为 X.o 文件: %.c:%.o

1.9K00

Linux学习笔记(二)、常用指令(下)

Makefile语法规则 Makefile规则 目标文件:依赖文件集合 命令 比如: main : main.oinput.o calcu.o gcc -o main main.o input.o calcu.o...如果要更新目标文件main,就必须先更新依赖文件(充分性),如果依赖文件中有更新目标文件也必须更新(必要性),“更新”就是执行一遍命令列表。...3)、如果目标文件不存在或者目标依赖的文件比目标文件新的话就会执行后面的命令来更新目标。...7、Makefile目标 回想之前的Makefile规则格式: 目标依赖文件。...在工作目标创建一个与执行指令同名的文件时,执行指令并不会执行,因为规则没有依赖文件,所以目标认为是最新的。

2.4K21

NXP的S32K144如何将静态库文件添加到 S32DS工程中?

来源:技术让梦想更伟大 作者:李肖遥 我们经常使用静态库或者动态库,那么在NXP的s32k144使用中,如何将静态库文件 (*.a) 添加到 S32 Design Studio GCC 项目中呢?...本文介绍两种方法,这些方法在库更新如何反映到项目构建过程中的意义上彼此不同。...1添加一个不依赖于可执行(elf)文件的静态库 这种方法假设库不会改变,库的更新不会触发项目重建过程,如果库更改,则需要手动清理项目(假设没有其他源文件已更改),并且下一个构建链接更新的库。...对于自定义库名称,请在库名称开头添加冒号“:”以禁用默认前缀/扩展名扩展,GCC 链接器现在在下面的示例中搜索文件名“testlib.lib”: 2将静态库与依赖项添加到可执行(elf)文件 如果静态库已更改...变量中,这是构建目标的自动生成的makefile规则(elf)。

4.8K10

【Linux笔记】make工程管理工具(二)

拿第1、2行这一条规则来举例说明, hello 目标文件, hello.o 依赖文件, gcc hello.o -o hello 命令。...Makefile文件主要包含5个方面内容:显示规则、隐式规则变量、文件指示、注释、实目标与伪目标等。 (1)显式规则。显式规则说明了,如何生成一个或多的的目标文件。...(2)隐式规则。隐含规则是系统或用户预先定义好的一些特殊规则,主要是一些常用的依赖关系和更新命令。一般规则使用文件的全名,而隐含规则中出现的目标文件和依赖文件都只使用文件的扩展名。...如果Makefile 文件里面没有显式给出文件的依赖关系的时候,make 就会根据文件的扩展名找到相应的隐含规则,然后按照隐含规则更新目标。...$^、 $@也是变量的调用,这两个变量Makefile文件中最常用的变量(不需要自己定义),$^ 代表当前规则中所有的依赖文件, $@ 代表当前规则目标文件。 (4)文件指示。

1.7K10

make menuconfig执行流程分析

如果一个规则没有命令或者依赖,并且它的目标不是一个存在的文件名。在执行此规则时,目标总会被认为是最新的。就是说:这个规则一旦被执行,make就认为它的目标已经被更新过。...这样的目标在作为一个规则依赖时,因为依赖总被认为被更新过,因此作为依赖所在的规则中定义的命令总会被执行。FORCE所在规则为空,也是什么都不做。...FORCE被定义一个伪目标,所以它作为依赖时总是被认为是最新的(比目标新),故有FORCE作为依赖目标每次make时必然会重新生成,在这里FORCE伪目标规则命令空,故FORCE在Kbuild体系中...如果一个规则没有命令或者依赖,并且它的目标不是一个存在的文件名。在执行此规则时,目标总会被认为是最新的。就是说:这个规则一旦被执行,make就认为它的目标已经被更新过。...这样的目标在作为一个规则依赖时,因为依赖总被认为被更新过,因此作为依赖所在的规则中定义的命令总会被执行。FORCE所在规则为空,也是什么都不做。

3.4K10

Makefile 使用总结

如果目标不是函数库文件(Unix下是[.a],Windows下是[.lib]),那么,其值空。 $<     依赖目标中的第一个目标名字。...如果目标中的后缀是make所不能识别的,那么"$*"就是空值。 当你希望只对更新过的依赖文件进行操作时,"$?"...中可以引用其他Makefile) 读入被include的其他Makefile 初始化文件中的变量 推导隐晦规则, 并分析所有规则 所有的目标文件创建依赖关系链 根据依赖关系, 决定哪些目标要重新生成...Makefile 初级语法 2.1 Makefile 规则 2.1.1 规则语法 规则主要有2部分: 依赖关系 和 生成目标的方法....--no-builtin-rules 禁止使用任何隐含规则 -R --no-builtin-variabes 禁止使用任何作用于变量上的隐含规则 -B --always-make 假设所有目标都有更新

3.5K30

makefile 基础、进阶及常用 makefile

命令:通过执行该命令由依赖文件生成目标 makefile 工作原理 1、若想生成目标,检查规则中的依赖条件是否存在,如不存在,则寻找是否有规则用来生成该依赖文件 2、检查规则中的目标是否需要更新,必须先检查它的所有依赖...,依赖中有任一个被更新,则目标必须更新 分析各个目标依赖之间的关系 根据依赖关系自底向上执行命令 根据修改时间比目标新,确定更新 如果目标依赖任何条件,则执行对应命令,以示更新 一个最简单的 makefile...main:main.c gcc main.c -o main 该 makefile 生成目标 main 的文件,依赖 main.c,所需命令是 gcc main.c -o main,注意前面的...先来分析一下,我们把手动执行编译的过程逆向思考一下,想生成目标可执行的 app 文件,需要依赖 4 个 .o 文件的支持,main.o add.o sub.o mul.o。...其执行流程是要生成的最终目标 app,app 需要 4 个 .o 文件的支持,这 4 个文件我们用了一个变量 obj 来表示。

31610

Make参数

-B –always-make 认为所有的目标都需要更新(重编译)。 -C –directory= 指定读取makefile的目录。...即输出不需要重编译的目标。v —— 也就是verbose,在b选项的级别之上。输出的信息包括哪个makefile被解析,不需要被重编译的依赖文件(或是依赖目标)等。...-p –print-data-base 输出makefile中的所有数据,包括所有的规则变量。这个参数会让一个简单的makefile都会输出一堆信息。...如果你只是想输出信息而不想执行makefile,你可以使用“make -qp”命令。如果你想查看执行makefile前的预设变量规则,你可以使用“make –p –f /dev/null”。...仅仅是检查所指定的目标是否需要更新。如果是0则说明要更新,如果是2则说明有错误发生。 -r –no-builtin-rules 禁止make使用任何隐含规则

1.5K11

专治看不懂makefile的人

makefile格式 makefile内容的编写按照如下规则 目标1:依赖1 命令1 目标2:依赖2 命令2 目标3:依赖3 命令3 ............................同理,“目标2”test.o依赖的是test.cpp,生成目标的命令是g++ -c test.cpp。 上面两个规则完成了从源代码到可执行文件的编译。...例如test依赖是100个.o文件,在上面的makefile中我们只要写一次all = test.o test1.o test2.o ..... test99.o,就把目标test的生成规则表达清楚了。...上面说的是按最原始的写法,实际makefile的编写有很多技巧使得编写量大大减少, 编译命令的各种参数选项统一都写在变量中 模式匹配 特殊符号代码依赖目标集 shell指令在makefile里完成自动查找生成所有文件名...伪目标 本文makefile里的“目标3”clear是个伪目标,伪目标后面无文件依赖,make不自动找文件依赖,无法执行后面的命令。要执行伪目标,就要make+目标名。

1.8K30

Linux从入门到入土③(GCC、静态与动态链接库、Git、Make、Makefile)

依赖文件被更新了,文件时间戳也会随之被更新,这时候 目标时间戳 < 某些依赖的时间戳 , 在这种情况下目标文件会通过规则中的命令被重新生成。...然后再修改例子中的 a.c, 再次通过 make 编译这几个源文件,那么这个时候先执行规则 2 更新目标文件 a.o, 然后再执行规则 1 更新目标文件 app,其余的规则是不会被执行的。...在 Makefile 中只要给出需要构建的目标文件名(一个.o 文件),make 会自动这个.o 文件寻找合适的依赖文件(对应的.c 文件),并且使用默认的命令来构建这个目标文件。...makefile 中的变量是没有类型的,直接创建变量然后给其赋值就可以了。创建变量之后一定要赋值在给 makefile 中的变量赋值之后,如何在需要的时候将变量值取出来呢?# 如何将变量的值取出?...Makefile 中的规则语句中经常会出现目标文件和依赖文件,==自动变量用来代表这些规则中的目标文件和依赖文件,并且它们只能在规则的命令中使用==。

1.4K10

Makefile 语法入门

注意 Makefile 文件命令必须是 Makefile 或者 makefile,并使用 make 命令编译。 二、1个规则 1. 语法规则 目标...: 依赖......目标 目标即要生成的文件。如果目标文件的更新时间晚于依赖文件的更新时间,则说明依赖文件没有改动,目标文件不需要重新编译。否则重新编译并更新目标。 3. 依赖目标文件由哪些文件生成。...如果依赖条件中存在不存在的依赖条件,则会寻找其它规则是否可以产生依赖条件。 例如:规则一是生成目标 hello.out 需要使用到依赖条件 hello.o,但是 hello.o 不存在。...则 Makefile 会寻找到一个生成 hello.o 的规则二并执行。 4. 命令 即通过执行该命令,由依赖文件生成目标文件。 注意每条命令前必须有且仅有一个 tab 保持缩进,这是语法要求。...四、3个变量 Makefile 中也有一些已经定义好的常用变量,这里介绍其中常用的3个。 1. $@ 表示规则目标,例如 hello.out。

75430

makefile文件编写「建议收藏」

规则makefile中最重要的概念,其告诉make 目标文件的依赖关系,以及如何生成及更新这些目标文件。...显式规则用于说明 何时及如何重新生成目标,其列出了目标依赖的文件信息,并通过调用命令来创建或更新目标,其语法一般: targets : prerequisites recipe...… targets要生成或更新目标,prerequisites目标依赖的关系,recipe为生成目标的命令,一个规则可以有多条recipe,比如 foo.o : foo.c defs.h...隐式规则用于说明 何时及如何来重新生成一类目标文件根据其名称,其描述了目标是如何依赖于名称相似的文件(一般来说除去后缀信息,其目标依赖文件的名称是一样的),并调用命令来创建或更新目标,比如 %.o :...%.c (CC) -c (CFLAGS) < -o 这个隐式规则说明了.o的目标文件依赖于同名的.c文件,其中< 及 <第一个prerequisites条件,也就是 目标名称.c,

2.1K10

Linux makefile 教程 非常详细,且易懂

4、如果edit所依赖的.o文件也不存在,那么make会在当前文件中找目标.o文件的依赖性,如果找到则再根据那一个规则生成.o文件。...3、初始化文件中的变量。 4、推导隐晦规则,并分析所有规则。 5、所有的目标文件创建依赖关系链。 6、根据依赖关系,决定哪些目标要重新生成。 7、执行生成命令。...当然,“自动化变量”除外,如“$<”等这种类量的自动化变量就属于“规则变量”,这种变量的值依赖规则目标依赖目标的定义。...还是先来看一看常用的隐含规则吧。 1、编译C程序的隐含规则。“.o”的目标依赖目标会自动推导“.c”,并且其生成命令是“ 2、编译C++程序的隐含规则。...如果目标中的后缀是make所不能识别的,那么” 当你希望只对更新过的依赖文件进行操作时,”$?”在显式规则中很有用,例如,假设有一个函数库文件叫”lib”,其由其它几个object文件更新

4.2K20

Makefile经典教程(掌握这些足够)

每一个 .o 文件都有一组依赖文件,而这些 .o 文件又是执行文件 edit 的依赖文件。依赖关系的实质上就是说明了目标文件是由哪些文件生成的,换言之,目标文件是哪些文件更新的。...如果edit所依赖的.o文件也存在,那么make会在当前文件中找目标.o文件的依赖性,如果找到则再根据那一个规则生成.o文件。...推导隐晦规则,并分析所有规则。 5.        所有的目标文件创建依赖关系链。 6.        根据依赖关系,决定哪些目标要重新生成。 7.        执行生成命令。...4.2 命令执行 当依赖目标新于目标时,也就是当规则目标需要被更新时,make会一条一条的执行其后的命令。需要注意的是,如果你要让上一条命令的结果应用在下一条命令时,你应该使用分号分隔这两条命令。...当然,“自动化变量”除外,如“$<”等这种类量的自动化变量就属于“规则变量”,这种变量的值依赖规则目标依赖目标的定义。

2.6K20

Makefile 的使用

命令被执行的 2 个条件:依赖文件比目标文件新,或是 目标文件还没生成。 ③ 先介绍 Makefile 的 2 个函数 A....3.2 Makefile 规则 一个简单的 Makefile 文件包含一系列的“规则”,其样式如下: 目标(target)…: 依赖(prerequiries)… 命令(command) 目标...依赖是用来产生目标的材料(比如源文件),一个目标经常有几个依赖。 命令是生成目标时执行的动作,一个规则可以含有几个命令,每个命令占一行。...通常,如果一个依赖发生了变化,就需要规则调用命令以更新或创建目标。但是并非所有的目标都有依赖,例如,目标“clean”的作用是清除文件,它没有依赖规则一般是用于解释怎样和何时重建目标。...make 首先调用命令处理依赖,进而才能创建或更新目标。 当然,一个规则也可以是用于解释怎样和何时执行一个动作,即打印提示信息。

4.3K42
领券