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

为什么这个makefile隐式规则不起作用?

makefile是一种用于自动化构建和编译程序的工具,其中隐式规则是makefile中的一种特殊规则,用于定义文件之间的依赖关系和构建规则。当make命令执行时,它会根据这些规则自动推导出需要执行的命令。

如果一个makefile中的隐式规则不起作用,可能有以下几个原因:

  1. 规则定义错误:检查makefile中的隐式规则定义是否正确。确保规则的格式正确,并且目标文件和依赖文件的命名正确。
  2. 文件命名不符合规则:隐式规则通常根据文件的扩展名来匹配目标文件和依赖文件。如果文件的命名不符合规则,隐式规则可能无法匹配到正确的文件。
  3. 文件路径问题:如果目标文件或依赖文件的路径不正确,隐式规则可能无法找到文件。确保文件的路径正确,并且在makefile中使用正确的路径。
  4. 依赖文件不存在或未更新:如果依赖文件不存在或未更新,隐式规则可能不会执行。确保依赖文件存在,并且在目标文件之前被更新。
  5. make命令执行错误:如果make命令执行时出现错误,可能导致隐式规则不起作用。检查make命令的输出信息,查找可能的错误原因。

如果以上方法都无法解决问题,可以尝试使用显式规则来替代隐式规则,明确指定目标文件和依赖文件之间的构建规则和命令。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云容器服务:https://cloud.tencent.com/product/tke
  • 腾讯云函数计算:https://cloud.tencent.com/product/scf
  • 腾讯云对象存储:https://cloud.tencent.com/product/cos
  • 腾讯云数据库:https://cloud.tencent.com/product/cdb
  • 腾讯云云服务器:https://cloud.tencent.com/product/cvm
  • 腾讯云人工智能:https://cloud.tencent.com/product/ai
  • 腾讯云物联网:https://cloud.tencent.com/product/iot
  • 腾讯云移动开发:https://cloud.tencent.com/product/mad
  • 腾讯云区块链:https://cloud.tencent.com/product/baas
  • 腾讯云元宇宙:https://cloud.tencent.com/product/vr
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Makefile-只修改了.h头文件,编译为什么不起作用

也就说明:make 并没有识别出 hello.h 这个头文件已经被改动了,尽管它“应该”可以从文件的修改时间上发现! 为什么会这样?...我们来看一下 Makefile 中的这个规则: %.o: %.c gcc $< -c -o $@ 目标文件 main.o,只是依赖了 main.c 文件,并没有依赖 hello.h 文件。...make 的执行规则是:只有目标文件不存在,或者依赖文件比目标文件更新的时候,才会执行编译指令。 因此,虽然 hello.h 被修改了,但是它并不是目标文件 main.o 的依赖。.../main // 执行 NUM = 1 有没发现:多出了一个文件 main.d,该文件内容是: main.o: main.c hello.h 这个文件正是因为 Makefile 中的 -MMD 这个参数导致生成的...然后在 Makefile 中,include 这个 .d 文件,从而让 make 知道:main.o 文件依赖于 main.c 和 hello.o 这 2 个文件。

4.7K30

makefile基础和工作常用点补充

一、Makefile简介 Makefile是什么,能做什么用,为什么要用?...定义编译规则、自动化编译、提高效率 组织文件 Makefile由一组规则(Rule)组成,每条规则的格式是: 例如: 依赖关系如下图: 注意: (1) 当我们为了执行命令而非创建目标文件时,就会使用伪目标比如...PHONY" 的作用是避免和当前 目录下的文件名冲突 (可能引发规则)。...(6) 如果不在 make 命令行显指定目标规则名,则默认使用第一个有效规则。...f fileName  -n 显示待执行的命令,但不执行 Makefile组成 显规则:生成、依赖文件,生成命令 隐含规则:make支持的自动推导功能, make –p 打印 变量定义:类C

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

    除此之外,这个文件中, #符号后面是注释, clean 是一个特殊的目标,它没有依赖,称为伪目标。 规则Makefile文件中的最基本的、也是最核心的部分。Makefile中还有其他内容。...Makefile文件主要包含5个方面内容:显示规则规则、变量、文件指示、注释、实目标与伪目标等。 (1)显规则。显规则说明了,如何生成一个或多的的目标文件。...(2)规则。隐含规则是系统或用户预先定义好的一些特殊规则,主要是一些常用的依赖关系和更新命令。一般规则使用文件的全名,而隐含规则中出现的目标文件和依赖文件都只使用文件的扩展名。...如果Makefile 文件里面没有显给出文件的依赖关系的时候,make 就会根据文件的扩展名找到相应的隐含规则,然后按照隐含规则来更新目标。...规则的例子是: hello:hello.o $(CC) $^ -o $@ (3)变量定义。

    1.7K10

    Linux系统-Makefile规则介绍、基本使用

    [wbyq@wbyq linux_c]$ make -f Makefile文件内部是以目标作为单位执行规则顺序的。...就是在生成这个目标之前,需要得到的文件。 2. make指定目标执行 Makefile文件里可以有多个目标文件,我们在命令行执行make命令默认执行Makefile文件里的第一个目标。...隐藏makefile文件执行命令 方法1: make -s 方法2: 在执行的命令前面加上@符号 4. 示例1: 编译一个简单的工程 使用显规则编写Makefile文件,编译一个工程。...示例2: 编译一个简单的工程 使用自动化编译符号优化Makefile文件,编译一个工程。 6. 示例3: 编译一个简单的工程 使用规则编写Makefile文件,编译一个工程。...特殊变量的使用 编写的Makefile文件: CC=gcc #指定编译器 VPATH=./main:./sum #指定推导时搜索的路径 CFLAGS=-I .

    1.3K30

    makefile文件编写「建议收藏」

    makefile文件规则有2种,一种是显规则,另一种是规则。...规则用于说明 何时及如何来重新生成一类目标文件根据其名称,其描述了目标是如何依赖于名称相似的文件(一般来说除去后缀信息,其目标与依赖文件的名称是一样的),并调用命令来创建或更新目标,比如 %.o :...%.c (CC) -c (CFLAGS) < -o 这个规则说明了.o的目标文件依赖于同名的.c文件,其中< 及 <为第一个prerequisites条件,也就是 目标名称.c,...在makefile中,我们通常要编写3种规则,第1种为代码链接规则,第2种为源代码编译规则,第3种为汇编代码编译规则。...,这样当头文件信息改变后,make程序就知道如何更新目标文件了,而不是整个进行重编译,但这个操作可以看出是非常消耗时间及傻瓜的,作为解决方案我们可以通过使用 编译器命令 –M选项来自动完成该工作,比如在

    2.9K10

    Go项目中Makefile的简单使用

    当然, clean 的规则不要放在文件的开头,不然,这就会变成make的默认目标,相信谁也不愿意这样。不成文的规矩是——“clean从来都是放在文件的最后”。....PHONY : all 声明了“all”这个目标为“伪目标”。...(注:这里的显“.PHONY : all” 不写的话一般情况也可以正确的执行,这样make可通过规则推导出, “all” 是一个伪目标,执行make不会生成“all”文件,而执行后面的多个目标。...3.2 Go项目的常用命令为什么要说一下Go中的常用命令呢,因为Go项目中Makefile的使用较为简单,大多都是对Go命令的一些执行操作,因此我们首先要熟知Go语言中的常用命令,才能更好的编写Makefile...比如代码中有个依赖包,但是并不知道这个包的依赖关系,这时候就可以使用这个命令查看。

    88800

    makefile终极奥义

    makefile规则 在讲述这个makefile之前,还是让我们先来粗略地看一看makefile规则。 target ... : prerequisites ......上述还只是简单的makefile,属于「显规则」,那么为了优化makefile我们介绍「规则makefile中使用变量 在Makefile中我们要定义一系列的变量,变量一般都是字符串,这个有点...里面我都有写.PHONY:clean这个规则,并且在make的时候并没有执行这个规则。...-name "*.c") 将当前目录及其子目录下所有文件后缀为 「.c」 的文件以空格为限赋值给 SRC 最终版本 先总结一下前面都讲了些什么 Makefile里主要包含了五个东西:「显规则」、「...显规则。显规则说明了如何生成一个或多个目标文件。这是由Makefile的书写者明显指出要生成的文件、文件的依赖文件和生成的命令。 隐晦规则

    1.3K30

    Makefile的详细介绍和使用

    makefile详细介绍和使用 Makefile定义规则 参考链接1:https://seisman.github.io/how-to-write-makefile/invoke.html 参考链接2:...https://www.cnblogs.com/LittleHann/p/3855905.html 规则makefile中最重要的概念,其告诉make 目标文件的依赖关系,以及如何生成及更新这些目标文件...在makefile文件规则有2种,一种是显规则,另一种是规则。...显示规则规则用于说明何时及如何重新生成目标,其列出了目标依赖的文件信息,并通过调用命令来创建或更新目标,其语法一般为: targets : prerequisites recipe … targets...gcc -c channle.c -o channle.o -std=c99 .PHONY:clean clean: -rm -rf *.o 执行的过程简单说就是最终需要生成一个名为test的文件,这个文件需要

    60140

    万字整理 | 深入理解编译系统

    后来你发现,你的解析程序解析你的规则文件后,直接在内部生成这个脚本执行这个脚本就可以了,没必要非要把这个脚本显地写出来再去执行,这一套东西就叫做组建系统。组建系统由两部分组成,解析程序和规则文件。...静态链接分为静态链接和显静态链接,静态链接是目标文件和目标文件直接合并在一起,显静态链接是目标文件和静态库进行链接,本质上还是和静态库里面的目标文件进行链接。...make命令会在同目录下寻找文件Makefile,然后解析并执行它。Makefile的内容包含5个部分,1.变量定义,2.显示规则,3.规则,4.文件指示,5注释。...文件指示类似于C语言中的预处理命令,如#include可以包含下层makefile。注释是以#开头的行。 显示规则的格式如下,规则没有命令部分。...为了区分两者,我们把前者叫做显静态链接,后者叫做静态链接。如果我们的程序有两个源文件组成,那么最终生成程序的时候就是两个目标文件的合并,也就是静态链接。

    74910

    快速上手和使用makefile

    makefile是什么?为什么要用makefile?简单的说makefile就是编译程序用的,因为用makefile效率高。...make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。...可见,makefile都成为了一种在工程方面的编译方法。 makefile关系到了整个工程的编译规则。...一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为...因此可以利用makefile的自动推导和规则进一步精简。

    1.4K20

    linux下,Makefile是啥??

    为什么要学习Makefile? Linux环境下的程序员如果不会使用GNU make来构建和管理自己的工程,应该不能算是一个合格的专业程序员,至少不能称得上是Unix程序员。...如果找到,它会找文件中的第一个目标文件(target),在上面的例子中,他会找到“main”这个 文件,并把这个文件作为最终的目标文件。...Makefile包含什么内容 Makefile里主要包含了五个东西:显规则、隐晦规则、变量定义、文件指示和注释。 显规则。显规则说明了如何生成一个或多个目标文件。...在Makefile中我们要定义一系列的变量,变量一般都是字符串,这个有点像你C语言中的 宏,当Makefile被执行时,其中的变量都会被扩展到相应的引用位置上。 文件指示。...make的工作方式 make的执行步骤如下: 读入所有的Makefile。 读入被include的其它Makefile。 初始化文件中的变量。 推导隐晦规则,并分析所有规则

    1.2K20

    深入WPF--Style

    Style会自动应用在Grid的所有子Button中,如果像button1一样在Button中显定义了Style(这里设置了一个空值Null),那么这种(Implicit)的Style会不起作用。...我们前面介绍的(Implicit)Style,只指定了一个TargetType={x:Type 类型},并没有指定键值,为什么它可以通过编译呢?   ...第16行创建了一个Style(Button),它的BasedOn属性仍然是Style(Button),Resource系统会向上查找找到Window的Resorces中的Style(Button...}),即使没有显设置MyButton的Style,所有的MyButton控件也不会使用这个Style的。...很多公司都有自己皮肤库,这些皮肤库一般都是的Style,定义了所有控件的Style,使用时把这个皮肤资源Merge到Application的Resources中。

    1K20

    Linux 开发 | 学习 Makefile

    Makefile 主要组成 显规则 明确写出来的依赖关系,如上述的 prerequisites.......规则 Make 自己推导出来的规则,比如目标为 main.o 就推出依赖条件中需要 main.c和对应的编译命令 变量定义 类似程序中宏定义, 文本替换。...读入被 include 的其他 Makefile,在对应位置展开 初始化变量 推导规则;分析所有规则,创建依赖关系链,决定哪些需要【重新】生成,执行命令。 从第一个 target(排除以 ....规则下对应的所有以 Tab 开头的指令,会被传递到对应的 shell 执行。 Makefile 执行指令必须在 recipe 这个位置。...如果一个规则是以“.IGNORE”作为目标的,那么这个规则中的所有命令将会忽略错误。

    5.4K10

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

    文章目录 Linux嵌入开发——Makefile基本语法 一、Makefile 规则格式 二、Makefile 变量 2.1、赋值符“=” 2.2、赋值符“:=” 2.3、赋值符“?...=” 2.4、变量追加“+=” 三、Makefile 模式规则 四、Makefile 自动化变量 五、Makefile 伪目标 Linux嵌入开发——Makefile基本语法 接下来我们来详细介绍一下基本的...一、Makefile 规则格式 Makefile文件里面其实就是由一系列的规则组成的,所以我们掌握这些规则格式非常重要,这些规则格式如下: 目标... : 依赖文件集合......在第一次编译的时候由于 main 还不存在,因此第一条规则会执行, 第一条规则依赖于文件 main.o、input.o 和 calcu.o 这个三个.o 文件,这三个.o 文件目前还都没有,因此必须先更新这三个文件...,这是为什么呢?

    1.5K20

    2023学习日志

    makefile 使用变量变量基础$makefile中的变量在声明时需要设置初始值,使用时需要在变量名前加" " ,可以通过使用括号()或大括号{}包围变量名示例:test = cpro.o: pro...$(test)变量展开不同于编程语言中变量的概念,Makefile中的变量更类似于c/c++中宏的概念,本质上是将变量的值替换到使用变量的地方变量的嵌套Makefile支持将变量的值赋给变量但为了防止变量的递归定义...(默认情况下,只有命令行中的变量会被传递,但Makefile中以export关键字声明的变量可以传递给下层make)目标变量可以为某个目标设置局部变量,称为目标变量目标变量可以和全局变量重名,作用范围为当前规则及其连带规则中...,不会影响规则链之外的全局变量的值语法如下: : ; : override <variable-assignment...for循环与迭代器for循环的底层地使用了迭代器迭代器的作用任何语言中迭代器的作用都是类似的:实现数据与抽象的分离提供统一、可靠的遍历数据序列(sequence)的方式无法对迭代器进行插入删除操作,

    23100

    【Linux】自动化构建工具-makeMakefile

    make程序会读取makefile文件中的数据,然后根据规则调用编译器,汇编器,链接器产生最后的输出。 Makefile里主要包含了五个东西:显规则、隐晦规则、变量定义、文件指示和注释。...显规则说明了,如何生成一个或多个目标文件。...make有自动推导的功能,所以隐晦的规则可以让我们比较粗糙地简略地书写makefile,比如源文件与目标文件之间的时间关系判断之类 在makefile中可以定义变量,当makefile被执行时,其中的变量都会被扩展到相应的引用位置上...依赖关系和依赖方法是完成一件事情的必然要素,并非makefile特有的。 这里clean:是一种特殊的依赖关系,这个clean不依赖任何一个文件,是一种特殊情况。...为什么makefile对最新的可执行程序,默认不重新形成呢? 如果在一个项目里面存在上千个源文件,每次改代码时候,可能就修改一小部分。

    12410
    领券