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

Makefile教程

也就是说,target这一个或多个目标文件依赖于prerequisites的文件,其生成规则定义在command。...在Makefile我们要定义一系列的变量,变量一般都是字符串,这个有点你C语言中的宏,Makefile被执行时,其中的变量都会被扩展到相应的引用位置上。 4.文件指示。.../src1 SRC=$(shell for dir in ${CPPDIRS};do echo $${dir}/*.cpp;done) (5.2)不必多个目录的源文件添加多个生成目标文件的编译语句,可以使用一条语句搞定...(2)Makefile内嵌shell脚本Makefile每一行的shell脚本需要一个shell进程来执行,不同行之间变量值不能传递。所以,Makefile的shell不管多长也要写在一行。...后缀规则不允许任何的依赖文件,如果有依赖文件的话,那就不是后缀规则,那些后缀统统被认为是文件名,: .c.o: foo.h $(CC) -c $(CFLAGS) $(CPPFLAGS

3.9K53

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

六、多目标 Makefile规则目标可以不止一个,其支持多目标可能我们的多个目标同时依赖于一个文件,并且其生成的命令大体类似。于是我们就能把其合并起来。...二、命令执行 依赖目标新于目标,也就是规则目标需要被更新,make会一条一条的执行其后的命令。需要注意的是,如果你要让上一条命令的结果应用在下一条命令,你应该使用分号分隔这两条命令。...每一次会返回一个字符串,循环过程,的所返回的每个字符串会以空格分隔,最后整个循环结束,所返回的每个字符串所组成的整个字符串(以空格分隔)将会是foreach函数的返回值...其在隐含规则并没有意义。 4、模式的匹配 一般来说,一个目标的模式一个前缀或是后缀的”%”,或是没有前后缀,直接就是一个”%”。...下面是搜索目标T的规则的算法。请注意,在下面,我们没有提到后缀规则,原因是,所有的后缀规则Makefile被载入内存,会被转换成模式规则

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

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

4.2 命令执行 依赖目标新于目标,也就是规则目标需要被更新,make会一条一条的执行其后的命令。需要注意的是,如果你要让上一条命令的结果应用在下一条命令,你应该使用分号分隔这两条命令。...每一次会返回一个字符串,循环过程,的所返回的每个字符串会以空格分隔,最后整个循环结束,所返回的每个字符串所组成的整个字符串(以空格分隔)将会是foreach函数的返回值...隐含规则 ———— 在我们使用Makefile一些我们会经常使用,而且使用频率非常高的东西,比如,我们编译C/C++的源程序中间目标文件(Unix下是[.o] 文件,Windows下是...在模式规则,如果有多个目标,那么,"$@"就是匹配于目标模式定义的集合。 $% 仅目标是函数库文件,表示规则目标成员名。...七、隐含规则搜索算法 比如我们一个目标叫 T。下面是搜索目标T的规则的算法。请注意,在下面,我们没有提到后缀规则,原因是,所有的后缀规则Makefile被载入内存,会被转换成模式规则

2.7K20

Linux 下的make命令与Makefile

一点需要注意的是,% 的展开发生在变量和函数的展开之后,变量和函数的展开发生在make载入Makefile,而模式规则的% 则发生在运行时。...模式规则介绍 模式规则,至少在规则目标定义要包含%,否则,就是一般的规则目标的% 定义表示对文件名的匹配,%表示长度任意的非空字符串。...•% : 仅目标是函数库文件,表示规则目标成员名。例如,如果一个目标是foo.a(bar.o),那么,%就是bar.o,@就是foo.a。如果目标不是函数库文件那么,其值空。...: %.o : %.s 同样,你也可以重新定义一个全新的隐含规则,其在隐含规则的位置取决于你在哪里写下这个规则。 隐含规则搜索算法 比如我们一个目标叫T。下面是搜索目标T的规则的算法。...请注意,在下面,我们没有提到后缀规则,原因是,所有的后缀规则Makefile被载入内存,会被转换成模式规则

10.1K20

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

静态库与动态库的区别静态库的代码在编译就拷⻉到应⽤程序,因此多个程序同时引⽤⼀个静态库函数,内存中将会调⽤函数的多个副本。由于是完全拷⻉,因此⼀旦连接成功,静态库就不再需要了,代码体积⼤。...参数s:创建目标文件索引,这在创建较大的库能加快时间。参数r:在库插入模块 (替换)。默认新的成员添加在库的结尾处,如果模块名已经在库存在,则替换同名的模块。...), 依赖(depend) 和命令(command):目标(target): 规则目标,这个目标规则的命令是对应的通过执行规则的命令,可以生成一个和目标同名的文件规则可以多个命令,因此可以通过这多条命令来生成多个目标...,所有目标也可以多个通过执行规则的命令,可以只执行一个动作,不生成任何文件,这样的目标被称为伪目标依赖(depend): 规则所必需的依赖条件,在规则的命令可以使用这些依赖。...模式匹配 -> 通过一个公式, 代表若干个满足条件的规则# 依赖一个, 后缀.c, 生成的目标是一个 .o 的文件, % 是一个通配符, 匹配的是文件名%.o:%.cgcc $< -c图片函数wildcard

1.5K10

Linux 开发 | 学习 Makefile

隐式规则 Make 自己推导出来的规则,比如目标 main.o 就推出依赖条件需要 main.c和对应的编译命令 变量定义 类似程序宏定义, 文本替换。...Make 会读取 Makefile 第一个规则的第一个目标, 设置要完成的最终目标。...上面这段规则目标targets 是 edit, Makefile ,targets 是文件名也可以是标号(比如clean),多个用空格分开,可以使用通配符(shell)。...就如上述例子,执行 make clean 进行清理工作。 静态模式 对应多个目标对象,构建每个对象对应名称的依赖关系的规则。...自定义函数 make执行这个函数,variable参数的变量,$(1),$(2),$(3)等,会被参 数 parm1, parm2,parm3 依次取代。

5.3K10

makefile

Makefile实际上是一个文件的依赖关系,也就是说, target这一个或多个目标文件依赖于dependency的文件,其生成规则定义在命令command。...一个makefile文件可定义多个目标,利用make target命令可指定要编译的目标,如果不指定目标,则使用第一个目标。...通常,makefile定义clean目标,可用来清除编译过程的中间文件。 # This makefile just is a example....(2)变量定义:在Makefile可以定义一系列的变量,变量一般都是字符串Makefile被执行时,变量的值会被扩展到相应的引用位置上。...$@ ——表示规则目标文件集。在模式规则,如果有多个目标,那么," $@ " 就是匹配于目标模式定义的集合。 $% ——仅目标是函数库文件,表示规则目标成员名。

1.9K00

Makefile 使用总结

在模式规则,如果有多个目标,那么,"$@"就是匹配于目标模式定义的集合。 $%     仅目标是函数库文件,表示规则目标成员名。...如果目标后缀是make所不能识别的,那么"$*"就是空值。 当你希望只对更新过的依赖文件进行操作,"$?"...可以引用其他Makefile) 读入被include的其他Makefile 初始化文件的变量 推导隐晦规则, 并分析所有规则 所有的目标文件创建依赖关系链 根据依赖关系, 决定哪些目标要重新生成...一个Makefile涉及到大量源文件(这些源文件和Makefile极有可能不在同一个目录), 这时, 最好将源文件的路径明确在Makefile, 便于编译查找....很多时候通过自动变量来简化书写, 各个自动变量的含义如下: 自动变量 含义 $@ 目标集合 $% 目标是函数库文件, 表示其中的目标文件名 $< 第一个依赖目标.

3.5K30

实战Makefile前,该知道那些知识?

清空目标文件的规则(make clean命令): 每个Makefile中都应该写一个清空目标文件( .o 和目标文件等)的规则,这不仅便于重编译,也很 利于保持文件的清洁。...命令参数 -s 或 --silent 或 --quiet 则是全面禁止命令的显示 命令执行规则依赖目标新于目标,make会一条一条的执行其后的命令。...赋值符'+=': Makefile的变量是字符串,有时候我们需要给前面已经定义好的变量添加一些字符串进去,此时就要使用到符号"+=": OBJ = main1.o main2.o OBJ += main3...系统自带变量: 系统自定义了一些变量,通常都是大学,比如CC,PWD,CLFAG等等,有些默认值,有些没有,比如以下几种,如下 CPPFLAGS:预处理器需要的选项,:-l CFLAGS:编译的时候使用的参数...这些变量可以让我们更加快速的完成Makefile的编写,其中自动变量只能在规则的命令使用,常用的自动变量如下: $@:规则目标 $<:规则的第一个依赖文件 $^:规则的所有依赖文件 CC

45920

Make

###二、Make的一般使用: 1、Makefile的基本构成: Makefile规则构成,一条规则生成一个或多个目标文件,其格式如下: 目标文件列表 分隔符 依赖文件列表 [;命令] //[]的内容可选....SUFFIXES:该目标的依赖被认为是一个后缀列表,在检查后缀规则使用。 .SILENT:生成该目标文件的依赖文件所执行的命令都不被打印,如果其后无依赖文件,则所有的命令都不会被打印。...多个目标: 一个规则可以多个目标,这些目标有相同的依赖文件 搜索目录: 通常在一个大的项目中,会把头文件、源文件、库文件放在不同的目录下。目录发生改变后,只需改变依赖文件的搜索目录。...$@:表示一个规则目标文件名。 $%:规则目标文件是一个静态库文件,$%就代表静态库的一个成员名。如果目标不是静态库文件,则该变量 值空。...$<:规则的第一个依赖文件名。 $>:规则是一个静态库文件,该变量表示静态库名。 $?:所有比目标文件新的依赖文件列表,以空格分隔。

1.9K100

make menuconfig makefile kconfig详解

(见第3小节举例) 因此,一般添加新的驱动需要修改的文件两种(注意不只是两个) *Kconfig *Makefile 要想知道怎么修改这两种文件,就要知道两种文档的语法结构。...您编译内核,将会读取.config文档,发现ap71flash 选项yes ,系统在调用/driver/mtd/maps/下的makefile ,将会把 flashtest.o加入到内核。...如果你的makefile的第一个目标是由许多个目标组成,你可以指示make,让其完成你所指定的目标。要达到这一目的很简单,需在make命令后直接跟目标的名字就可以完成(make clean)。...任何在makefile目标都可以被指定成终极目标,但是 除了以“-”打头,或是包含了“=”的目标,因为有这些字符的目标,会被解析成命令行参数或是变量。...FORCE被定义一个伪目标,所以它作为依赖总是被认为是最新的(比目标新),故有FORCE作为依赖的目标每次make必然会重新生成,在这里FORCE伪目标规则命令空,故FORCE在Kbuild体系

1.8K10

6_Makefile与GCC

6.1.2.4 链接: ​ 解析目标代码的外部引用,将多个目标代码文件连接一个可执行文件。 ​...gcc在默认的路径没有找到头文件,就到本选项指定的目录中去找。在上面的例子创建一个目录,然后创建一个头文件test.h。...6.4.3.3 目标生成规则: ​ 目标生成: ​ 1)检查规则的依赖文件是否存在。 ​ 2)若依赖文件不存在,则寻找是否规则用来生成该依赖文件。...6.5.2.4 赋值符‘+=’ ​ Makefile 的变量是字符串,有时候我们需要给前面已经定义好的变量添加一些字符串进去,此时就要使用到符号“+=”,比如如下: 01 OBJ = main.o add.o...一个目标被声明为伪目标后,make在执行规则不会去试图去查找隐含规则来创建它。这样就提高了make的执行效率,也不用担心由于目标和文件名重名了。 ​

3.5K10

Hello Qt——QMake用户指南

三、QMake命令行使用 qmake多个选项在命令行运行,qmake的行为可以被自定义。qmake选项可以微调构建过程,提供有用的诊断信息,并指定工程的目标平台。...-d:qmake会输出调试信息 对于每个目标平台都需要不同构建的多个子目录的工程,qmake可以使用下列选项在每个工程文件设置相应特定平台的变量。...下面是如何在工程文件定义唯一标识符。 支持IDS的可用类型四种:UID2、UID3、SID和VID。...两个变量可以接受一个值列表: QMAKE_EXT_CPP:qmake会将这些后缀的文件解释C++源文件 QAMKE_EXT_H:qmake会将这些后缀的文件解释C和C++头文件 7、自定义MakeFile...target:自定义构建目标创建的文件 CONFIG变量: recursive:指明MakeFile要创建的规则,因而会在子目标MakeFile文件调用相关目标

5.5K20

可移植的 Makefile 教程

只有一个意外:在 Makefile ,第一个非特殊的目标会被认为是 默认目标(default target)。调用 make 但是没有并没有指定一个目标,这个默认目标就会被自动选择。...make ,它会从依赖树接受零个或多个目标, 如果目标过时(out-of-date)了,然后构建这些目标 -- 比如,运行目标规则的命令。...为了解决这一点,make 宏(macro)的概念,宏被引用时就会被展开字符串。...Makefile 应该在需要提供默认值。 一个宏通过 $(...) 进行展开。引用一个尚未定义的宏是有效(也是常见)的,未定义的宏会被展开一个空字符串。这就是下面的 LDFLAGS 情况。...很多教程讲述了如何在构建同时生成依赖,但是它很脆弱和缓慢。最好是在一次性完成,在 Makefile 写好依赖,以便于 make 能够如期工作。

1.3K10

Makefile 的使用

Makefile 怎么放置第 1 个目标: 执行 make 命令如果不指定目标,那么它默认是去生成第 1 个目标。 所以“第 1 个目标”,位置很重要。...在 Makefile.build 设置编译规则 3 条编译规则: i. 怎么编译子目录?...依赖是用来产生目标的材料(比如源文件),一个目标经常有几个依赖。 命令是生成目标执行的动作,一个规则可以含有几个命令,每个命令占一行。...对于上面的 Makefile,执行“make”命令,仅 hello.c 文件比 hello 文件新,才会执行命令“armlinux-gcc –o hello hello.c”生成可执行文件 hello...如果扩展非空字符串,则条件‘condition’‘真’;如果扩展字符串,则条件‘condition’‘假’。

4.3K42

Makefile学习1

目标 一个规则也可以多个目标多个目标具有相同的生成命令和依赖文件。...但是还有一种情况:在Makefile规则,一般不会把头文件添加目标依赖。...PI值3.1415,再次使用make编译程序,make并没有重新编译,因为module.h并没有添加Makefile规则依赖目标,所以无论你怎么修改module.h,都不会重新编译helloworld.c...可能会遇到,比如: $%:规则目标是一个静态库文件,$%代表静态库的一个成员名 $+:类似$^,但是保留了依赖文件重复出现的文件 $*:在模式匹配和静态模式规则,代表目标模式%的部分。...比如hello.c,匹配模式%.c,$*表示hello $(@D):表示目标文件的目录部分 $(@F):表示目标文件的文件名部分 $(*D):在模式匹配,表示目标模式%的目录部分 $(*F):

34010

g++,CMake和Makefile了解一下

,再详细介绍下,如下: 1.预处理阶段 首先在终端输入下面代码: g++ -E test.cpp > test.i 预处理后的文件在 linux下以.i后缀名,这个过程是用来激活预处理,执行完命令后...- make需要执行的命令(任意的shell命令),Makefile的命令必须以 [tab] 开头 2.3 Makefile语法 Makefile包含了五个重要的东西:显示规则、隐晦规则、变量定义、...显示规则: 通常在写makefile使用的都是显式规则,这需要指明target和prerequisite文件。...一条规则可以包含多个target,这意味着其中每个target的prerequisite都是相同的。其中的一个target被修改后,整个规则的其他target文件都会被重新编译或执行。 2....隐晦规则: make的自动推导功能所执行的规则 3. 变量的定义: Makefile定义的变量,一般是字符串 4.

1.5K20

如何使用Makefile在Ubuntu上自动执行重复任务

一般的想法是,通过添加源,我们可以构建一组必须在当前目标之前执行的顺序依赖项。您可以在任何目标之后指定多个以空格分隔的源。您可以开始了解如何指定精细的任务序列。...这告诉make我们将在文件后缀中使用的所有后缀。默认情况下包含一些常用于编译源代码的后缀“.c”和“.o”文件,不需要在此声明中标记。 下一部分是实际后缀规则的声明。...Make将转到Makefile,请参阅.SUFFIXES声明的.png,然后转到匹配的后缀规则。然后运行列出的命令。...您所见,我们已将.jpeg添加后缀列表,并为我们的规则添加了另一个后缀匹配项。 创建一些Targets 我们现在在Makefile中有很多,但我们还没有任何正常的目标。...所有这些新目标都列出了我们收集的.png文件名作为要求。然后看看是否一种方法可以获取.png文件并使用后缀规则来执行此操作。

2.3K00

Makefile 的使用(在 Linux 中使用 make 命令来编译程序)

Makefile 怎么放置第 1 个目标: 执行 make 命令如果不指定目标,那么它默认是去生成第 1 个目标。 所以“第 1 个目标”,位置很重要。...在 Makefile.build 设置编译规则 3 条编译规则: i. 怎么编译子目录?...依赖是用来产生目标的材料(比如源文件),一个目标经常有几个依赖。 命令是生成目标执行的动作,一个规则可以含有几个命令,每个命令占一行。...对于上面的 Makefile,执行“make”命令,仅 hello.c 文件比 hello 文件新,才会执行命令“armlinux-gcc –o hello hello.c”生成可执行文件 hello...@表示规则目标文件名; ^表示所有依赖的名字,名字之间用空格隔开; <表示第一个依赖的文件名。‘%’是通配符,它和一个字符串任意个数的字符相匹配。

8.7K10

Makefile从入门到上手

①、三个自动变量 $@ # 在规则的命令,表示规则目标。...可以看到 A 的值空,B 的值 abc,因为 A 即时变量,在定义即确定,所以为空 修改 Makefile 将 C 的赋值放在最后: A := $(C) B = $(C) #C = abc...每一次 会返回一个字符串,循环过程, 的所返回的每个字符串会以空格分隔,最后整个循环结束, 所返回的每个字符串所组成的整个字符串(以空格分隔)将会是 foreach...>,) 名称:过滤函数 功能:以 模式过滤 字符串的单词,保留符合模式 的单词。可以多个模式。...>,) 名称:反过滤函数 功能:以 模式过滤 字符串的单词,去除符合模式 的单词。可以多个模式。

35330
领券