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

包含子目录的Makefile,模式规则仅适用于第一个依赖项

Makefile是一种用于管理和自动化软件构建过程的工具。它通常用于编译源代码、链接库文件和生成可执行文件。Makefile中的模式规则是一种用于匹配多个文件的规则,它可以根据文件名的模式来执行相应的操作。

对于包含子目录的Makefile,可以使用以下方法来处理:

  1. 子目录的规则:在Makefile中,可以使用相对路径或变量来指定子目录的规则。可以为每个子目录创建一个独立的规则,以便在构建过程中进入子目录并执行相应的操作。
  2. 递归调用:可以使用递归调用的方式来处理包含子目录的Makefile。在Makefile中,可以使用make命令来调用子目录中的Makefile,并在子目录中执行相应的操作。这样可以实现对整个项目的递归构建。
  3. 使用通配符:可以使用通配符来匹配子目录中的文件,并在Makefile中使用模式规则来处理这些文件。通过使用通配符,可以简化Makefile的编写,并自动处理子目录中的文件。

对于模式规则仅适用于第一个依赖项的情况,可以通过在规则中使用变量来实现。可以将第一个依赖项的名称保存在一个变量中,并在规则中引用该变量。这样可以确保模式规则只适用于第一个依赖项。

对于腾讯云相关产品和产品介绍链接地址,可以参考腾讯云官方文档或官方网站获取最新信息。

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

相关·内容

qmake:变量手册

默认情况下,androiddeployqt 将检测应用程序的依赖项。 但是,由于无法检测到插件的运行时使用情况,因此可能会出现误报,因为应用程序可能依赖于任何潜在依赖项的插件。...146、QMAKE_RPATHLINKDIR 指定静态链接器的库路径列表以搜索共享库的隐式依赖项。 147、QMAKE_RUN_CC 指定构建对象所需的单个规则。...但是,doc 可以与其他子目录并行构建,从而加快构建过程。 注意:可以列出多个依赖项,它们都将在依赖它们的目标之前构建。...注意:此模板类型仅适用于基于 Makefile 的生成器。 特别是,它不适用于 vcxproj 和 Xcode 生成器。 vcapp:仅限 Windows。...203、YACCSOURCES 指定要包含在项目中的 Yacc 源文件列表。 所有依赖项、头文件和源文件都将自动包含在项目中。

3.9K20

Makefile教程

3.Makefile内容 Makefile里主要包含了五个东西:显式规则、隐晦规则、变量定义、文件指示和注释。 1.显式规则。显式规则说明了,如何生成一个或多个的目标文件。...如果target已存在,则检测target依赖项是否是最新的,若被修改,则重新生成target; (4)如果依赖项(比如目标文件)是根据其它依赖项生成的,那么按照步骤3来检测生成依赖项。...(1)Makefile中内置变量 $@、$^、$<、$? 。 $@ 表示目标文件,$^ 表示所有的依赖文件,$第一个依赖文件,$? 表示比目标还要新的依赖文件列表。...大家也可以举一反三,给出自己的Makefile模板。 7.相关知识点 7.1Makefile中目标文件一定要把依赖的头文件包含进去吗? 不一定,可以不包含进去。...我们的原则是,自己定义的头文件写入依赖项,库的头文件无需包含,除非你要修改库的头文件。

4.1K53
  • Makefile学习1

    Makefile内容 简单的概括一下Makefile 中的内容,它主要包含有五个部分,分别是: 1) 显式规则 显式规则说明了,如何生成一个或多的的目标文件。...规则中也可以没有命令,仅仅包含目标和目标依赖,仅仅用来描述一种依赖关系,但一个规则中一定要有一个目标。 默认目标 一个Makefile文件里通常会有多个目标,一般会选择第一个作为默认目标。...这种变量一般称为自动变量,自动变量是局部变量,作用域范围在当前的规则内,它们分别代表不同的含义: $@:目标 $^:所有目标依赖 $依赖列表中的第一个依赖 $?...时可能会遇到,比如: $%:当规则的目标是一个静态库文件时,$%代表静态库的一个成员名 $+:类似$^,但是保留了依赖文件中重复出现的文件 $*:在模式匹配和静态模式规则中,代表目标模式中%的部分。...,解析各个子目录下的Makefile并运行,遍历完所有的子目录 make依次遍历到各个子目录下解析新的Makefile时,项目顶层目录的主Makefile定义的一些变量,如何传递到子目录的Makefile

    39510

    qmake:高级用法

    depends:自定义构建目标所依赖的现有构建目标。 recurse:指定在 Makefile 中创建规则以调用子目标特定的 Makefile 时应使用哪些子目标。...recurse_target:指定应通过子目标 Makefile 为 Makefile 中的规则构建的目标。 target:自定义构建目标的名称。...例如,在静态链接库时,不会链接其他库,因此不会创建对这些库的依赖项。如果明确启用跟踪,qmake 会在适当的情况下尝试跟踪库的依赖项。 第一步是在库本身中启用依赖项跟踪。...必须告诉 qmake 保存有关库的信息: CONFIG += create_prl 这仅适用于 lib 模板类型的工程,所有其他模板将被忽略。....prl 文件应仅由 qmake 创建,不应在操作系统之间传输,因为它们可能包含平台相关信息。

    1.9K10

    qmake手册(Qt5.9.3)

    aux Makefile没有任何东西。如果不需要调用编译器来创建目标,请使用此方法,例如因为您的项目是使用解释型语言编写的。注意:此模板类型仅适用于基于Makefile的生成器。...subdirs 包含使用SUBDIRS变量指定的子目录的规则的Makefile。每个子目录都必须包含自己的项目文件。 vcapp Visual Studio项目文件来构建一个应用程序。...Makefile模式选项部分描述了仅适用于生成文件模式的选项,而项目模式选项部分则介绍了影响项目文件创建的选项。 文件 files参数表示一个或多个项目文件的列表,以空格分隔。...windows 目标是一个Win32窗口应用程序(仅适用于应用程序)。合适的包含路径,编译器标志和库将自动添加到项目中。 console 目标是一个Win32控制台应用程序(仅适用于应用程序)。...如果提供了指定尺寸的描述,则一般描述将被覆盖。 YACCSOURCES 指定要包含在项目中的Yacc源文件的列表。 所有的依赖项,头文件和源文件将自动包含在项目中。

    5.8K20

    Linux工具入门:make工具与Makefile文件

    make工具通过一个称为Makefile的文件来完成并自动维护编译工作,Makefile文件描述了整个工程的编译、连接规则。 回到顶部 2....Makefile文件 Makefile描述了整个工程的编译连接规则。Makefile的基本规则为: TARGET...: DEPENDENCIES... COMMAND ......Makefile的简单示例 $ touch add.c add.h sub.c sub.h main.c 现在有这5个文件add.h 、sub.h中包含了函数声明,add.c、sub.c中包含了函数实现...选项名 作用 $@ 规则的目标文件名 $规则的第一个依赖文件名 $^ 规则的所有依赖文件列表 刚才的Makefile文件,我们可以改写为: main:main.o add.o sub.o...) 【main的生成依赖与当前目录及所有子目录下的.o文件】 $(CC) $(CFLAGS) -o $(BIN) $(ROOTOBJ) $(SUBOBJ) .o .c:

    3.1K40

    Linux工具入门:make工具与Makefile文件

    make工具通过一个称为Makefile的文件来完成并自动维护编译工作,Makefile文件描述了整个工程的编译、连接规则。 2. Makefile文件 Makefile描述了整个工程的编译连接规则。...Makefile的基本规则为: TARGET...: DEPENDENCIES... COMMAND ......Makefile的简单示例 $ touch add.c add.h sub.c sub.h main.c 现在有这5个文件add.h 、sub.h中包含了函数声明,add.c、sub.c中包含了函数实现...选项名 作用 $@ 规则的目标文件名 $规则的第一个依赖文件名 $^ 规则的所有依赖文件列表 刚才的Makefile文件,我们可以改写为: main:main.o add.o sub.o...) 【main的生成依赖与当前目录及所有子目录下的.o文件】 $(CC) $(CFLAGS) -o $(BIN) $(ROOTOBJ) $(SUBOBJ) .o .c:

    3.4K40

    可移植的 Makefile 教程

    本指南不仅适用于之前从来没有写过 Makefile 的 make 初学者,同样适用于想要学习如何写出可移植 Makefile 的资深开发者。...所有特殊目标都有大写的名字,并且开始于一个周期。符合这个模式的名字被 make 保留使用。根据标准,为了获得可靠的 POSIX 行为,Makefile 的第一个非注释行必须是 .POSIX....对于包含头文件的源文件,在依赖树也应该有指向源文件的边。如果头文件改变了,那么包含它的目标也应该被重新构建。...Recursive Makefiles 当你的项目被分为几个子目录,你可能会试图在每个子目录下放一个 Makefile ,然后递归调用。 不要使用递归的 Makefile。...你可能需要告诉你的编辑器如何做到这一点。 当涉及子目录下的文件时,在名字中包含子目录即可。所有 make 关心的内容都会跟之前一样正常工作,包括推断规则。

    1.4K10

    makefile终极奥义

    这就是整个make的依赖性,make会一层又一层地去找文件的依赖关系,直到最终编译出第一个目标文件。...会自动推导生成.o文件 除了通配符,makefile还提供了自动推导的自动变量 自动变量 符号 含义 $@ 代表目标文件 $^ 代表所有依赖文件 $第一个依赖文件 由此第二个版本出来了 第二个版本...-name "*.c") 将当前目录及其子目录下所有文件后缀为 「.c」 的文件以空格为限赋值给 SRC 最终版本 先总结一下前面都讲了些什么 Makefile里主要包含了五个东西:「显式规则」、「...显式规则。显式规则说明了如何生成一个或多个目标文件。这是由Makefile的书写者明显指出要生成的文件、文件的依赖文件和生成的命令。 隐晦规则。...各级子目录的Makefile 「各级子目录的Makefile」 这个是最简单的,只需要obj-y+=将所有.o文件或者子级目录添加即可,例如 sub文件夹下的 makefile obj-y += sub.o

    1.3K30

    Hello Qt——QMake用户指南

    下列时可用工程类型: app:创建一个构建应用程序的MakeFile lib:创建一个构建库的MakeFile subdirs:创建一个包含使用SUBDIRS变量指定子目录的规则的MakeFile,每个子目录必须包含自己的工程文件...qmake生成的MakeFile文件会包含两种版本的构建规则,使用下列方式进行调用: make all 增加build_all选项到CONFIG变量会生成构建工程的默认规则,并且创建debug和release...例如,如果想要在某个平台包含某个特定文件,仅且在调试开启时处理。...此时,qmake会生成包含构建两种版本的规则的MakeFiles,使用make all可以调用。 当链接库时,qmake依赖于底层平台来了解库中链接的其它库。...CONFIG:为自定义编译器指定配置选项 depend_command:指定用于生成输出依赖项列表的命令。

    6.4K20

    成为Oceanbase贡献者(2):源码解读build.sh debug --make 的执行过程

    本文主要描述:源码如何编译ob build.sh debug --make 的执行过程# 1. 初始化依赖./build.sh --init# 2. 选择编译模式(debug/release等)....CMake 是一个跨平台的开源构建系统,用于管理软件项目的编译过程,通过读取CMakeLists.txt文件,生成适用于不同的操作系统和编译器环境 构建文件 CMake 与makefile关系?...由于其直接编写规则,灵活性较高,但难以管理复杂的依赖关系和跨平台兼容性。CMake:适合大型项目和跨平台开发。...这种方法非常适合需要同时构建多个相互依赖的项目。...、手动控制场景大型项目、跨平台开发功能简单的编译规则管理高级抽象配置,支持模块化开发跨平台性较差,仅适用于特定平台跨平台,支持多种IDE和编译器灵活性高,可直接修改规则中等,通过配置文件间接修改构建流程维护性差

    4700

    eBPF动手实践系列三:基于原生libbpf库的eBPF编程改进方案

    此外,网络上也偶见比较古老的仅依赖一个bpf_load.c文件的C语言编程方案,这个方案并不需要依赖libbpf库的支持。...如果不依赖libbpf-bootstrap编程框架,继续仅依赖 libbpf 库是否可以做到这一点呢?...libbpf-bootstrap编程框架非常成熟,但方案使用中必须遵循他的一些规则,比如头文件trace_execve.skel.h的命令必须包含程序的关键词trace_execve,再比如加载函数trace_execve_bpf...的源码,为了实现以上的目标依赖,我们连用了5个静态模式规则(Static Pattern Rules)。...bpf.o $(SKEL_OBJECT):%.skel.h:%.hex $(USER_OBJECT):%.o:%.c %.skel.h $(LOADER_OBJECT): %:%.o 其中任何一个静态模式规则的目标集合

    41910

    Makefile 的使用

    要想完整地了解 Makefile 的规则,请参考《GNU Make 使用手册》,以下仅粗略介绍。...在 Makefile.build 中设置编译规则,有 3 条编译规则: i. 怎么编译子目录?...3.2 Makefile 规则 一个简单的 Makefile 文件包含一系列的“规则”,其样式如下: 目标(target)…: 依赖(prerequiries)… 命令(command) 目标...注意:每个命令行前面必须是一个 Tab 字符,即命令行第一个字符是 Tab。这是容易出错的地方。 通常,如果一个依赖发生了变化,就需要规则调用命令以更新或创建目标。...当然,一个规则也可以是用于解释怎样和何时执行一个动作,即打印提示信息。 一个 Makefile 文件可以包含规则以外的其他文本,但一个简单的 Makefile 文件仅仅需要包含规则。

    4.3K42

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

    要想完整地了解 Makefile 的规则,请参考《GNU Make 使用手册》,以下仅粗略介绍。...在 Makefile.build 中设置编译规则,有 3 条编译规则: i. 怎么编译子目录?...3.2 Makefile 规则 一个简单的 Makefile 文件包含一系列的“规则”,其样式如下: 目标(target)…: 依赖(prerequiries)… 命令(command) 目标...当然,一个规则也可以是用于解释怎样和何时执行一个动作,即打印提示信息。 一个 Makefile 文件可以包含规则以外的其他文本,但一个简单的 Makefile 文件仅仅需要包含规则。...@表示规则的目标文件名; ^表示所有依赖的名字,名字之间用空格隔开; 第一个依赖的文件名。‘%’是通配符,它和一个字符串中任意个数的字符相匹配。

    9.1K10

    Linux 开发 | 学习 Makefile

    读入被 include 的其他 Makefile,在对应位置展开 初始化变量 推导隐式规则;分析所有规则,创建依赖关系链,决定哪些需要【重新】生成,执行命令。 从第一个 target(排除以 ....Makefile 中 第一个规则的第一个目标, 设置为要完成的最终目标。...静态模式 对应多个目标对象,构建每个对象对应名称的依赖关系的规则。...,Make 才会重新执行依赖关系。但是对于一个文件包含什么头文件,对应修改 Makefile,这样是很难维护的。 C/C++ 编译器 -MM 功能可以自动找寻文件的包含 ,生成依赖关系。...例如,子目录 subdir 下有一个 Makefile 描述该目录模块的编译规则, 那么总控 Makefile 中调用子目录 Makefile 可以这么写: subsystem : cd subdir

    5.4K10

    Makefile

    $第一个依赖文件。 所以该规则会使*.c从第一个开始,逐个编译为对应的.o文件。 小结:隐式规则让Makefile更简洁,很多情况下不需要显式定义规则。...$< 示例 %.o: %.c gcc -c $< -o $@ 在这个例子中,$规则中的第一个依赖文件,如 main.c。 $规则中列出的第一个依赖文件。...$规则中的第一个依赖文件。例如,main.c。 $@:表示目标文件。例如,main.o。 通过模式规则,可以避免重复定义规则,适用于大规模项目中的批量操作。...减少人工维护的错误:避免手动书写依赖关系带来的遗漏问题。 注意: 包含依赖文件时,如果依赖文件不存在,Makefile可能会报错。...包含所有依赖 include $(SRC:.c=.d) 通过这条规则,可以动态包含所有的依赖文件。 完善Makefile 通过上述方法,我们可以逐步完善一个Makefile。

    12410

    翻译qmake文档(三) Creating Project Files

    例如你的项目是用解释型语言编写的。 注意:这个模板类型只适用于基于Makefile的生成器。特别是,它不会与vcxproj和Xcode生成器一起工作。...subdirs Makefile规则包含使用SUBDIRS变量指定的子文件。每一个子目录必须包含它自己的项目文件。...当使用subdirs模板时,qmake生成一个makefile用来检查每一个子目录,处理在子目录里找到的工程文件,并执行平台的make 工具生成新的Makefile。...SUBDIRS变量被用于包含所有要被处理的子目录的列表。 常规配置 CONFIG变量指定项目应该配置的选项和功能。      可以在release模式或debug模式或两种模式一起构建项目。...如果你指定 debug_and_release 选项用来构建项目的debug和release两个版本,qmake会生成包含构建两个版本规则的Makefile。

    95360
    领券