首页
学习
活动
专区
工具
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,腾讯云的云服务器提供了稳定可靠的计算资源,适合用于构建和部署软件项目。

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

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

相关·内容

深度刨析makefile

) 三、makefile 世界的“规则” 1. makefile 中都有哪些规则 (1)makefile 的五大部分 ① 显示规则 要生成的目标文件,依赖文件,生成目标文件要使用的命令。...(2)makefile 的书写规则 最基本的就是按照三要素去写:目标、依赖和命令。 目标 : 依赖 Tab 命令 目标和命令都可以使用通配符、变量、函数去代替,命令是一条 shell 命令。...2. makefile 的字符匹配和文件搜索 (1)字符匹配 ① 通配符 字符匹配首先想到的就是通配符,因为 makefile 中使用的是 shell 中的命令,所以 shell 中的通配符在 makefile...② 模式匹配字符 % 第二种用于字符匹配的是 % , % 字符作用类似于通配符 * ,它和 * 的区别是,模式匹配字符可以对目标文件与依赖文件进行匹配。...这个目标没有任何依赖文件的含义是:将所有的文件视为中间文件。 .IGNORE: 这个目标的依赖文件忽略创建这个文件所执行命令的错误,给此目标指定命令是没有意义的。

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

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

    4.3K20

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

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

    2.8K20

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

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

    3.3K20

    Makefile 使用总结

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

    3.6K30

    深入掌握 Makefile 与 Make 工具:高效管理自动化编译的核心原理和最佳实践

    特殊符号 在 makefile 中,% 是通配符,常用于模式规则(Pattern Rules),用于匹配文件名的通用模式。...模式规则让 make 能够定义一类目标的构建方式,而无需为每个目标单独编写规则。例如,可以用 %.o: %.c 来描述如何从 .c 文件生成 .o 文件,% 表示文件名的任意部分。...使用 % 的模式规则 以下是模式规则的典型结构: %.o: %.c $(CC) $(CFLAGS) -c $< -o $@ 解释 %.o: %.c 表示所有 .o 文件都可以通过对应的 .c 文件生成...优势 使用 % 可以大大简化 makefile,特别是当项目中有很多类似的文件需要相同的规则时,减少了重复代码,使 makefile 更加简洁和通用。...Makefile 中的配置 有时在 makefile 中的配置也会影响重新编译的条件,例如使用变量、条件语句和模式规则等。 总结 需要重新编译:当源文件、依赖文件发生变化,或者手动强制重新编译时。

    59850

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

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

    2.4K00

    技术栈系列基础篇2-Makefile

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

    59130

    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.5K20

    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.4K10

    Linux 下的make命令与Makefile

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

    10.2K20

    一步步写属于自己的makefile

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

    65130

    Makefile学习2

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

    33610

    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终极奥义

    「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里的替换引用规则,即用您指定的变量替换另一个变量。

    56710
    领券