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

使用模式和通配符的Makefile :没有要创建目标的规则

Makefile是一种用于自动化构建和管理软件项目的工具,通常用于编译源代码、生成可执行文件或库文件等任务。使用模式和通配符的Makefile可以更加灵活地定义规则和目标,以适应不同的项目需求。

在Makefile中,可以使用模式和通配符来匹配文件名或路径,从而实现对多个文件的批量处理。模式是一种包含通配符的字符串,可以用来匹配文件名或路径的一部分。常用的通配符有*表示任意字符序列,?表示任意单个字符,[...]表示匹配方括号中的任意一个字符。

使用模式和通配符的Makefile可以通过定义规则来处理符合特定模式的文件。规则由目标、依赖和命令组成。目标是需要生成的文件,依赖是生成目标所需要的文件或其他目标,命令是生成目标的具体操作步骤。

对于没有要创建目标的规则,可以使用伪目标(.PHONY)来表示。伪目标不对应任何实际的文件,只是作为一个标记存在。可以在伪目标下定义一些需要执行的命令,以实现特定的功能。

以下是一个示例的Makefile使用模式和通配符的规则:

代码语言:txt
复制
# 伪目标,没有要创建的目标规则
.PHONY: clean

# 清理生成的目标文件
clean:
    rm -rf *.o

# 编译所有的C源文件
%.o: %.c
    gcc -c $< -o $@

# 生成可执行文件
app: main.o utils.o
    gcc $^ -o $@

在上述示例中,clean是一个伪目标,用于清理生成的目标文件。%.o: %.c是一个规则,表示将所有的C源文件编译为目标文件。app是一个目标,依赖于main.o和utils.o,通过gcc命令将它们链接为可执行文件。

这里推荐使用腾讯云的云服务器(CVM)来运行Makefile,腾讯云的云服务器提供了稳定可靠的计算资源,适合用于构建和部署软件项目。

更多关于腾讯云云服务器的信息和产品介绍,可以参考腾讯云的官方文档:腾讯云云服务器

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

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

这里这个函数是截取字符串意思,“@”表示目标的集合,就像一个数组,“ 七、静态模式 静态模式可以更加容易地定义多目标的规则,可以让我们规则变得更加有弹性灵活。...还有一个提一下make参数是“-k”或是“–keep-going”,这个参数意思是,如果某规则命令出错了,那么就终规则执行,但继续执行其它规则。...我们还可以通过“模式规则方式写下自己隐含规则。用“后缀规则”来定义隐含规则会有许多限制。使用模式规则”会更回得智能清楚,但“后缀规则”可以用来保证我们Makefile兼容性。...五、定义模式规则 你可以使用模式规则来定义一个隐含规则。一个模式规则就好像一个一般规则,只是在规则中,目标的定义需要有”%”字符。”%”意思是表示一个或多个任意字符。...其在隐含规则中并没有意义。 4、模式匹配 一般来说,一个目标的模式有一个有前缀或是后缀”%”,或是没有前后缀,直接就是一个”%”。

4.2K20

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

3.7 静态模式 静态模式可以更加容易地定义多目标的规则,可以让我们规则变得更加有弹性灵活。...targets定义了一系列目标文件,可以有通配符。是目标的一个集合。 target-parrtern是指明了targets模式,也就是的目标集模式。...还有一个提一下make参数是“-k”或是“--keep-going”,这个参数意思是,如果某规则命令出错了,那么就终规则执行,但继续执行其它规则。...这个Makefile中并没有写下如何生成foo.obar.o这两目标的规则命令。...还得要注意是,这些变量只使用规则命令中,而且一般都是"显式规则""静态模式规则"(参见前面"书写规则"一章)。其在隐含规则中并没有意义。

2.6K20

全网最牛Linux内核Makefile系统文件详解(纯文字代码)

3、初始化文件中变量。 4、推导隐晦规则,并分析所有规则。 5、为所有的目标文件创建依赖关系链。 6、根据依赖关系,决定哪些目标重新生成。 7、执行生成命令。...七、静态模式 静态模式可以更加容易地定义多目标的规则,可以让我们规则变得更加有弹性灵活 我们还是先来看一下语法: : : <prereq-patterns...prereq-parrterns是目标的依赖模式,它对target-parrtern形成模式再进行一次依赖目标的定义。 这样描述这三个东西,可能还是没有说清楚,还是举个例子来说明一下吧。...还有一个提一下make参数是“-k”或是“--keep-going”,这个参数意思是,如果某规则命令出错了,那么就终规则执行,但继续执行其它规则。...如果Makefile中定义了CFLAGS,那么则会使用Makefile这个变量,如果没有定义则使用系统环境变量值,一个共性个性统一,很像“全局变量”“局部变量”特性。

3.1K20

Makefile 使用总结

这个特性是GNU make,很有可能不兼容于其它版本make,所以,你应该尽量避免使用"$*",除非是在隐含规则或是静态模式中。...还得要注意是,这些变量只使用规则命令中,而且一般都是"显式规则""静态模式规则"(参见前面"书写规则"一章)。其在隐含规则中并没有意义。 1....Makefile 简介 Makefile make 命令一起配合使用....中可以引用其他Makefile) 读入被include其他Makefile 初始化文件中变量 推导隐晦规则, 并分析所有规则 为所有的目标文件创建依赖关系链 根据依赖关系, 决定哪些目标重新生成...Makefile 初级语法 2.1 Makefile 规则 2.1.1 规则语法 规则主要有2部分: 依赖关系 生成目标的方法.

3.5K30

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

@:如果使用“@”符号引导命令,则命令调用本身不会打印到标准输出。这主要用于清理产生输出。 附加功能 一些其他功能可以帮助您在Makefile创建更复杂规则链。...如果转义行尾字符,请确保在“\”后面没有任何多余空格或制表符,否则您将收到错误。 文件后缀规则 如果进行文件处理,可以使用另一个功能是文件后缀。...:此变量包含当前目标的比目标更新依赖项列表。这些将是在执行此目标下命令之前必须重新完成目标。 $@:此变量是当前目标的名称。这允许我们引用您尝试制作文件,即使此规则通过模式匹配。...将此视为目标文件源文件之间中间阶段。 创建转换Makefile 我们将创建一个Makefile,它将执行一些图像处理,然后将文件上传到我们文件服务器,以便我们网站可以显示它们。...如您所见,我们已将.jpeg添加到后缀列表中,并为我们规则添加了另一个后缀匹配项。 创建一些Targets 我们现在在Makefile中有很多,但我们还没有任何正常目标。

2.3K00

技术栈系列基础篇2-Makefile

显式规则说明了,如何生成一个或多目标文件。这是由Makefile书写者明显指出,生成文件,文件依赖文件,生成命令。隐晦规则。...)变量引用可以使用 ${变量名} 或 $(变量名) 中括号或括号都可以Makefile变量使用其实非常简单,因为它并没有像其它语言那样定义变量时候需要使用数据类型。...include语法是:include # 在include前面可以有一些空字符,但是绝不能是[Tab]键开始# filename可以是当前操作系统Shell文件模式(可以保含路径通配符...但是上面伪目标的写法有一个缺陷,若是当前目录下存在有一个文件名为"clean",那么根据我们规则,command将不会被执行,因为目标已经存在了,为了解决这个问题,我们可以使用一个特殊标记...clean这个伪目标功能是删除所有被make创建文件。install这个伪目标功能是删除所有被make创建文件。print这个伪目标的功能是例出改变过源文件。

55930

Makefile基本用法

使用默认编译再次简化 虽然更紧凑,但是每个目标的所依赖信息放在不同地方,可能不够清晰。 ? 无空格换行等价 单行长度过长不易于阅读,转义符本身会导致替换后空格产生。...前两行等价,第三行-include使make忽略不存在或无法重新生成且没有错误消息makefile ? ? ?...管道命令 对调用规则施加特定顺序,而不必强制更新目标,使用管道命令。 当执行此条规则,则首先需要执行先决条件规则。然而当先决条件存在,不论是否被更改,都属于满足条件。...随后按原始顺序执行规则。 ? 通配符 *.o 匹配所有的.o文件, ? $?匹配修改过文件 ? 赋值过程中没有被理解为通配符,而是认为就是*.o本身,需要使用wildcard$进行声明。 ? ?....POSIX 如果.POSIX被称为目标,那么makefile将被解析并以符合POSIX模式运行。 变量导出 使用export进行导出,供子makefile使用

2.5K40

Make 命令教程

二、Makefile文件格式 构建规则都写在Makefile文件里面,学会如何Make命令,就必须学会如何编写Makefile文件。..."目标"是必需,不可省略;"前置条件""命令"都是可选,但是两者之中必须至少存在一个。 每条规则就明确两件事:构建目标的前置条件是什么,以及如何构建。下面就详细讲解,每条规则这三个组成部分。...Makefile 通配符与 Bash 一致,主要有星号(*)、问号(?) [...] 。比如, *.o 表示所有后缀名为o文件。...f1.o: f1.c f2.o: f2.c 使用匹配符%,可以将大量同类型文件,只用一条规则就完成构建。 3.5 变量赋值符 Makefile 允许使用等号自定义变量。...3.8 判断循环 Makefile使用 Bash 语法,完成判断循环。

2K40

浅谈 Make 命令

二、Makefile文件格式 构建规则都写在Makefile文件里面,学会如何Make命令,就必须学会如何编写Makefile文件。..."目标"是必需,不可省略;"前置条件""命令"都是可选,但是两者之中必须至少存在一个。 每条规则就明确两件事:构建目标的前置条件是什么,以及如何构建。下面就详细讲解,每条规则这三个组成部分。...Makefile 通配符与 Bash 一致,主要有星号(*)、问号(?) [...] 。比如, *.o 表示所有后缀名为o文件。...f1.o: f1.c f2.o: f2.c 使用匹配符%,可以将大量同类型文件,只用一条规则就完成构建。 3.5 变量赋值符 Makefile 允许使用等号自定义变量。...3.8 判断循环 Makefile使用 Bash 语法,完成判断循环。

1.3K10

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

在第一次编译时候由于 main 还不存在,因此第一条规则会执行, 第一条规则依赖于文件 main.o、input.o calcu.o 这个三个.o 文件,这三个.o 文件目前还都没有,因此必须先更新这三个文件...最后一个规则目标是 clean,它没有依赖文件,因此会默认为依赖文件都是最新,所以其对应命令不会执行,当我们想要执行 clean 的话可以直接使用命令“make clean”,执行以后就会删除当前目录下所有的...答案是肯定,不过我们需要引入我们接下来介绍Makefile 模式规则了。好啦,就让我们开始吧!!!...: main.c gcc -c main.c input.o: input.c gcc -c input.c calcu.o: calcu.c gcc -c calcu.c 其实我们所谓模式规则就是在目标中引入了一个通配符...我们来具体看一看都有哪些自动化变量: 自动化变量 描述 $@ 规则目标集合,在模式规则中,如果有多个目标的话,“$@”表示匹配模式中定义目标集合。

1.4K20

Linux 下make命令与Makefile

达到这一目的很简单,需在make命令后直接跟目标的名字就可以完成(如前面提到“make hello_kitty”形式)任何在makefile目标都可以被指定成终极目标,甚至没有被我们明确写出来目标也可以成为...checktest:这两个伪目标一般用来测试makefile流程。 如果你书写这种功能,最好使用这种名字命名你目标,这样规范一些,规范好处就是——不用解释,大家都明白。...用“后缀规则”来定义隐含规则会有许多限制。使用模式规则”会更回得智能清楚,但“后缀规则”可以用来保证我们Makefile兼容性。...) 我们可以注意到,这个Makefile中并没有写下如何生成hello.okitty.o这两目标的规则命令。...模式规则介绍 模式规则中,至少在规则目标定义中包含%,否则,就是一般规则。目标中% 定义表示对文件名匹配,%表示长度任意非空字符串。

10.1K20

Linux 开发 | 学习 Makefile

---- Makefile概述 基本格式 基本上每一个 Makefile 主体就是由若干个以下规则模块组成 : 表明输出目标,输出目标的依赖对象生成目标需要执行命令。...编写规则 Make 会读取 Makefile 中 第一个规则第一个目标, 设置为完成最终目标。...规则包含 : 依赖关系 生成目标的方法 把上面的 Makefile 修改一下: # Makefile learn by lcd SRCS = main.c SRCS += command.c SRCS...上面这段规则,目标targets 是 edit, Makefile 中,targets 是文件名也可以是标号(比如clean),多个用空格分开,可以使用通配符(shell)。...Make 参数是“-k”或是“--keep-going”,这个参数意思是,如果某规则命令出错了,那么就终规则执行,但继续执行其它规则

5.3K10

一步步写属于自己makefile

本文将自己常用一个makefile一步步按照解决需求思路,逐步深入。并没有枯燥地讲解makefile基础,而是在涉及地方进行说明。...程序员当然没有那么傻 wildcard、patsubst以及模式匹配%新makefile代码如下: # hello由hello.o生成,所以hello依赖于hello.o; # 依赖关系用冒号(:)...假设,我们在当前目录下添加一个子目录sub/,并且在该目录下创建3个文件,分别是:sub_routine1.c、sub_routine2.csub_routine3.c。...第一个参数,匹配模式;第二个参数,替换字符串;第三个参数,替换文本字符串。 wildcard 列举符合通配符表达式所有源文件,输出以空格为分隔符列表。...使用没有任何问题,但是,我们发现上面的.o目标文件遵循就近原则,散落在各个目录下。

60730

Makefile学习2

ifndef 关键字 ifndef关键字ifdef相反,如果一个变量没有定义,表达式为真。 Makefile函数 GNU make 提供了大量函数用来处理文件名、变量、文本命令。...对于 GNU make内嵌函数,直接引用就可以了;对于用户自定义函数,通过makecall函数来间接调用。 函数参数列表之间要用空格隔开,多个参数之间使用逗号隔开。...在Makefile中可以使用通配符有:* 、? 、 […]。通配符使用方法含义和在shell中一样。 通配符 使用说明 * 匹配0个或者是任意个字符 ?...:所有更新过依赖文件 在Makefile中,通配符主要用在两个场合: 用在规则目标依赖中:make在读取Makefile时会自动对其进行匹配处理 test: *.o gcc -o $@ $...^ *.o: *.c gcc -c $^ 用在规则命令中:通配符通配处理在shell执行命令时完成 clean: rm -f *.o 除了以上两种情况,在其他地方都不能直接使用通配符

28910

Makefile文件编写

--no-builtin-rules 禁止使用任何隐含规则 -R --no-builtin-variabes 禁止使用任何作用于变量上隐含规则 -B --always-make 假设所有目标都有更新...典型伪目标是 Makefile 中用来清理编译过程中中间文件 clean 伪目标, 一般格式如下: .PHONY: clean <-- 这句没有也行, 但是最好加上 clean: -rm...-f *.o 引用其他 Makefile 语法: include (filename 可以包含通配符路径) # Makefile 内容 all: @echo...end make[1]: Leaving directory `/path/to/test/makefile' 主 Makefile end Makefile 隐含规则 这里只列一个编译C相关....比目标新依赖目标的集合 $^ 所有依赖目标的集合, 会去除重复依赖目标 $+ 所有依赖目标的集合, 不会去除重复依赖目标 $* 这个是GNU make特有的, 其它make不一定支持 all

1.2K30

makefile

(2)dependency(依赖):生成目标文件(target)所依赖哪些文件 (3)command(命令):创建项目时需要运行shell命令 (注:命令(command)部分每行缩进必须要使用...在模式规则中,如果有多个目标,那么," $@ " 就是匹配于目标中模式定义集合。 $% ——仅当目标是函数库文件中,表示规则目标成员名。...这种规则更加通用,因为可以利用模式规则定义更加复杂依赖性规则。...模式规则看起来非常类似于正则规则,但在目标名称前面多了一个 % 号,同时可用来定义目标依赖文件之间关系,例如下面的模式规则定义了如何将任意一个 X.c 文件转换为 X.o 文件: %.c:%.o...2.4 Makefile函数 在Makefile中可以使用函数来处理变量,从而让命令或规则更为灵活具有智能,函数调用,很像变量使用,也是以“$”来标识,函数调用后,函数返回值可以当做变量来使用

1.9K00

makefile终极奥义

「prerequisites」 生成该target所依赖文件/或target 「command」 该target执行命令(任意shell命令) 一个示例 首先还是使用上期「编译链接,你还不会用...上述还只是简单makefile,属于「显式规则」,那么为了优化makefile我们介绍「隐式规则makefile使用变量 在Makefile中我们定义一系列变量,变量一般都是字符串,这个有点...(如:ld ) 隐晦规则 如果我们想定义一系列比较类似的文件,我们很自然地就想起使用通配符通配符 符号 含义 % 任意一个 ?...函数 在Makefile中可以使用函数来处理变量,从而让我们命令或是规则更为灵活具有智能。...显式规则。显式规则说明了如何生成一个或多个目标文件。这是由Makefile书写者明显指出生成文件、文件依赖文件生成命令。 隐晦规则

1.3K30

make wildcard_其在古文中用法

Makefile规则中,通配符会被自动展开。但在变量定义函数引用时,通配符将失效。...在Makefile中,它被展开为已经存在使用空格分开、匹配此模式所有文件列表。如果不存在任何符合此模式文件,函数会忽略模式字符并返回空。...需要注意是:这种情况下规则通配符展开上一小节匹配通配符区别。 一般我们可以使用“(wildcard *.c)”来获取工作目录下所有的.c文件列表。...objects) cc -o foo $(objects) 这里我们使用了make隐含规则来编译.c源文件。...或者可以使用obj=(dir:%.c=%.o)效果也是一样。 这里用到makefile替换引用规则,即用您指定变量替换另一个变量。

53110

Makefile 使用

pattern’`replacement’中可以使用通配符。...依赖是用来产生目标的材料(比如源文件),一个目标经常有几个依赖。 命令是生成目标时执行动作,一个规则可以含有几个命令,每个命令占一行。...这是容易出错地方。 通常,如果一个依赖发生了变化,就需要规则调用命令以更新或创建目标。但是并非所有的目标都有依赖,例如,目标“clean”作用是清除文件,它没有依赖。...规则一般是用于解释怎样何时重建目标。make 首先调用命令处理依赖,进而才能创建或更新目标。 当然,一个规则也可以是用于解释怎样何时执行一个动作,即打印提示信息。...‘%’是通配符,它一个字符串中任意个数字符相匹配。

4.3K42
领券