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

为什么这个makefile不构建依赖关系,而是仅在使用变量时构建

Makefile是一种用于自动化构建和管理软件项目的工具,它使用一种称为Makefile的特殊文件来描述构建过程中的依赖关系和操作步骤。Makefile中的规则定义了目标文件、依赖关系和构建命令。

在Makefile中,变量是用来存储和传递值的,可以在构建过程中使用。当使用变量时,Makefile会根据变量的值来执行相应的构建命令。

对于给出的问题,如果这个Makefile不构建依赖关系,而是仅在使用变量时构建,可能有以下几个可能的原因:

  1. Makefile中没有正确定义依赖关系:Makefile中的规则应该明确指定目标文件和其所依赖的文件。如果没有正确定义依赖关系,Makefile就无法根据文件的修改时间来判断是否需要重新构建目标文件。
  2. 变量的使用方式不正确:如果变量的使用方式不正确,可能导致Makefile只在使用变量时才会执行构建命令。正确的使用方式是在依赖关系中使用变量,以确保在构建过程中正确地传递和使用变量的值。
  3. Makefile中存在错误的语法或逻辑错误:Makefile是一种特殊的脚本语言,如果存在语法错误或逻辑错误,可能导致构建过程不按预期进行。在这种情况下,需要仔细检查Makefile中的语法和逻辑,确保没有错误。

针对这个问题,可以通过以下步骤来解决:

  1. 检查Makefile中的规则:确保每个目标文件都有正确的依赖关系,并且依赖的文件在目标文件之前被构建。
  2. 检查变量的使用方式:确保变量在依赖关系中正确地使用,并且在构建命令中能够传递正确的值。
  3. 检查Makefile中的语法和逻辑错误:仔细检查Makefile中的语法和逻辑,确保没有错误。可以使用Makefile的调试工具或者打印调试信息来帮助定位问题。

总结起来,一个Makefile不构建依赖关系,而是仅在使用变量时构建的原因可能是由于依赖关系没有正确定义、变量的使用方式不正确或者存在语法和逻辑错误。通过仔细检查Makefile中的规则、变量和语法,可以解决这个问题。

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

相关·内容

qmake:变量手册

22、DEPENDPATH 指定 qmake 要扫描的目录列表,以确定依赖关系。当 qmake 抓取在源代码中 #include 的头文件,将使用变量。...50、QMAKESPEC 一个系统变量,包含生成 Makefile 使用的 qmake 配置的完整路径。该变量的值是自动计算的。注意:不要试图覆盖这个变量的值。...注意:鼓励使用 CONFIG += ordered,因为它会减慢多核构建的速度。与上面显示的示例不同,即使它们没有依赖关系,所有构建也将按顺序发生。...不能与 .subdir 修饰符一起使用。 .depends:这个子项目依赖于指定的子项目。 .makefile:子项目的makefile仅在使用 makefile 的平台上可用。...subdirs:创建用于在子目录中构建目标的 Makefile。子目录是使用 SUBDIRS 变量指定的。 aux:为构建任何内容的项目创建一个 Makefile

3.5K20

Makefile 入门教程

Makefile 是一个非常强大的构建自动化工具,用于管理项目的编译、链接和其他构建任务。以下是一个详细的 Makefile 使用文档,包括基本概念、语法、示例和常见任务。 1....命令 (Commands):命令是在生成目标要执行的操作。命令必须以 Tab 键开头。 变量 (Variables):变量用于存储文本或命令,并可以在整个 Makefile 中重复使用。...伪目标 (Phony Targets):伪目标是代表实际文件的目标,而是用于执行特定操作的标记。 2....这些函数可以在 Makefile 中用于各种目的,例如文件操作、文本处理和条件判断。 5.2 自动化依赖关系生成 通常,Makefile 中的依赖关系需要手动维护。...然后,可以使用递归或变量传递来管理这些子目录之间的依赖关系

28720

Makefile 入门教程

Makefile 是一个非常强大的构建自动化工具,用于管理项目的编译、链接和其他构建任务。以下是一个详细的 Makefile 使用文档,包括基本概念、语法、示例和常见任务。 1....•命令 (Commands):命令是在生成目标要执行的操作。命令必须以 Tab 键开头。•变量 (Variables):变量用于存储文本或命令,并可以在整个 Makefile 中重复使用。...•伪目标 (Phony Targets):伪目标是代表实际文件的目标,而是用于执行特定操作的标记。 2....这些函数可以在 Makefile 中用于各种目的,例如文件操作、文本处理和条件判断。 5.2 自动化依赖关系生成 通常,Makefile 中的依赖关系需要手动维护。...然后,可以使用递归或变量传递来管理这些子目录之间的依赖关系

20020

qmake手册(Qt5.9.3)

依赖关系 通常,当链接到一个库,qmake依靠底层平台来知道这个库链接的其他库,并让平台把它们拉进来。然而,在许多情况下,这是不够的。...例如,当静态链接一个库,没有其他库链接到,因此不会创建这些库的依赖关系。然而,后来链接到这个库的应用程序需要知道在哪里可以找到静态库所需的符号。...有关更多信息,请参阅macOS版本依赖关系。 QMAKE_MAKEFILE 指定要创建的Makefile的名称。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。....depends 这个子项目依赖于指定的子项目。 .makefile 子项目的makefile仅在使用makefile的平台上可用。...subdirs 创建一个用于在子目录中构建目标的Makefile。子目录是使用SUBDIRS变量指定的。 aux 创建一个Makefile建造任何东西。

5.2K20

【Linux系统编程】Linux项目自动化构建工具——makeMakefile

背景 make和makefile提供了自动化构建的能力,可以根据源文件的依赖关系和规则自动决定哪些文件需要重新编译。而直接使用gcc需要手动指定每个源文件的编译命令,不具备自动化的构建功能。...可见,makefile都成为了一 种在工程方面的编译方法。 make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建。...我们把目标文件和他所依赖的文件列表之间的关系称为依赖关系,对应的命令称为依赖方法 所以: makefile是一个国绕依赖关系依赖方法构建的一个自动化编译的工具 3.2 依赖关系依赖方法的理解...使用make和makefile的主要步骤如下: 创建一个makefile文件,并为各个目标指定构建规则。 在makefile中定义源文件之间的依赖关系以及对应的编译命令。...还是以这个为例 大家看 我两次执行make(指定默认是第一个即make myfile),有什么不同。 第一次make执行了makefile文件中的第一个目标规则,并生成了对应的文件。

16010

Makefile学习1

当你使用make命令去编译一个工程项目,make工具会首先到这个项目的根目录下去寻找Makefile文件,然后才能根据这个文件去编译程序。...Makefile规则 规则 Makefile通过规则进行构建可执行文件编译所依赖关系树 规则是Makefile的基本组成单元。...延迟变量则是使用 = 操作符进行赋值,在make解析Makefile阶段不会立即展开,而是等到实际使用这个变量才展开,获得其真正的值。...应用: 立即展开变量一般用在规则中的目标、目标依赖中。make在解析Makefile阶段,需要这些变量有确切的值来构建依赖关系树。...如果希望在命令行指定的变量值替代在Makefile中的原来定义,那么我们可以在Makefile使用指示符 override 对这个变量进行声明: .PHONY: all override web =

31510

Makefile入门

# 一、Makefile简介 # 1、Makefile是什么 Makefile是一种用于自动化构建程序的工具,它提供了一系列规则来指定源代码文件之间的依赖关系,以及如何生成目标文件。...# 2、make 和 Makefile关系 Make是一个命令工具,用于解释和执行Makefile中的指令,完成项目的自动化构建。...这意味着,每次当你运行make targetb,make不会尝试查找一个叫做targetb的文件并尝试运行它的命令,而是会执行与targetb` 关联的命令。...这意味着变量会在声明时立即被计算,并且在之后的所有引用中都会使用这个计算结果。即使变量的值在后续发生了变化,之前的引用也不会受到影响。...这不会覆盖变量的现有内容,而是将新值添加到变量的末尾。 # vim Makefile A?

9510

Linux中Makefile文件详解

Makefile 是一个用于构建和管理项目的工具,特别适用于 C/C++ 项目。它定义了项目中各个文件之间的依赖关系,并指定了如何编译和链接这些文件。...clean: 清理规则,执行 make clean 将删除生成的可执行文件和中间目标文件。 3. 使用 Makefile 在项目目录中,执行以下命令: 构建项目: make 或 make all。...注意事项 空格问题: Makefile 使用 Tab 键而不是空格来缩进规则。 文件依赖Makefile 的核心是文件之间的依赖关系,确保每个目标都依赖于正确的文件。...以下是使用自动变量的例子: main: main.o utils.o gcc -o $@ $^ 这个规则等价于之前的规则,使用了自动变量来表示目标文件和所有依赖文件。 7....自动生成依赖关系 使用 -M 选项可以让编译器自动生成依赖关系。这对于跟踪头文件之间的依赖关系很有帮助。

21810

【Linux】--- Linux编译器-gccg++、调试器-gdb、项目自动化构建工具-makeMakefile 使用

为什么直接将c语言转为二进制目标文件呢?因为前人已经写好了汇编的编译器,我们只需站在巨人的肩膀上,再将高级语言转为较简单的汇编代码即可。 那么如何形成第一个汇编写的汇编编译器呢?...可见,makefile都成为了一种在工程方面的编译方法; make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建。...makefile / make会自动根据文件中的依赖关系,进行自动推导,帮助我们执行所有的相关的依赖方法。 makefile文件中,保存了编译器和链接器的参数选项,并且描述了所有源文件之间的关系。...在makefile中可以定义变量,当makefile被执行时,其中的变量都会被扩展到相应的引用位置上。4. 通常使用 $(var) 表示引用变量文件指示。...并不生成目标文件,而是为了执行一些指令. 于是我们便可使用vim编写如上内容。里面$相当于取值操作,@最终会被替换目标文件,而^会被替换为依赖方法。

13320

Hello Qt——QMake用户指南

下列可用工程类型: app:创建一个构建应用程序的MakeFile lib:创建一个构建库的MakeFile subdirs:创建一个包含使用SUBDIRS变量指定子目录的规则的MakeFile,每个子目录必须包含自己的工程文件...这使得构建过程更加灵活,只要在处理MakeFile文件环境变量被正确设置。 特殊的$$[…]操作符被用于访问Qt构建的多个配置选项。...但是,如果是静态链接,除非使用下列的CONFIG选项,否则qmake不会得到这些信息。 create_prl:本选项使qmake能够追踪这些依赖关系。...例如:DEFINES += USE_MY_STUFF QT_DLL DEPENDPATH 此变量包含要查找依赖关系的所有目录的列表,会在查找包含文件时候使用。...例如,当静态链接一个库,没有链接到其他库,因此不会创建与这些库的依赖关系。但是,后续链接到该库的应用程序需要知道在哪里可以找到静态库所需的符号。

5.2K20

程序员C语言快速上手——工程篇(十三)

C语言工程构建 shell脚本(bat脚本) Makefile 脚本 基本语法规则 补充说明 CMake工具 安装 简单示例 基础规则 外部构建 定义变量 内置变量 命令 指定构建环境 生成 Makefile...文件 生成 Visual Studio工程 其他环境 补充 C语言工程构建 为什么需要编译脚本?...既然可以通过命令行脚本(shell)完成编译工作,为什么还需要Makefile脚本文件呢?...实际上表达的是一种依赖关系,即要生成前面的target,所需要依赖的文件或是另一个目标 command 表示需要执行的命令。...,而Makefile脚本正是将这个依赖关系反过来描述,即一个可执行程序需要依赖哪些.o文件,每一个.o文件又依赖于哪些.c、.h文件。

2.9K30

Makefile基础教程:从零开始学习

本篇博客将从基础开始,介绍Makefile的相关知识,帮助大家快速掌握Makefile使用方法 Makefile是什么 Makefile是一个非常强大的构建程序工具,主要用于管理程序的依赖关系构建规则...例如,当我们需要添加新的依赖关系,我们只需要在Makefile中添加相应的规则即可,而不需要手动编译每个目标文件。 此外,Makefile还具有自动分析依赖关系的功能,可以根据依赖关系自动构建程序。...Makefile的基本语法 Makefile的基本语法由目标、依赖关系和命令三部分组成,其中目标和依赖关系用于描述构建规则,命令用于执行构建操作。...main.c hello.o: hello.c gcc -c hello.c 在这个示例中,我们可以看到Makefile中的目标和依赖关系都很简单,但在实际的项目中,我们往往需要构建更复杂的目标...此外,在Makefile中可以定义变量,以便在构建过程中使用。这些变量可以存储文件路径、编译器选项等信息。 除此之外,在Makefile中还可以使用函数和宏来实现更加灵活的构建规则。

33220

Linux:常用软件、工具和周边知识介绍

Makefile 文件包含了一系列规则和命令,描述了项目中各个文件之间的依赖关系以及如何构建和编译项目。...test_make 在Makefile中,依赖关系表示目标文件依赖于哪些其他文件,而依赖方法表示如何生成目标文件 依赖关系: 在Makefile中,每个目标文件都有一组依赖关系,这些依赖关系指示了生成目标文件所需的其他文件或操作...依赖关系是指在构建目标文件之前需要先构建或获取的文件或操作。 依赖关系通常是源文件或其他目标文件,它们是构建目标文件的输入或先决条件。...这些自动化变量通常用于构建命令中,以方便地引用目标和依赖文件。...但对于生成目标文件出现的错误,或编译不成功的情况,make 不会立即退出,而是继续执行后续的规则。 make 工具只关心文件之间的依赖关系,如果依赖关系满足,就会执行后续的命令来生成目标文件。

14810

Linux项目自动化构建工具-makeMakefile

可见,makefile都成为了一种在工程方面的编译方法。 make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建。...以上代码实例快速感受一下make指令 说明原理 make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建。...依赖关系依赖方法 mytest:code.c称之为依赖关系 mytest是目标文件,使用make命令后,生成的运行文件叫mytest code.c是依赖文件列表,如果有多个使用空格符隔开,例如:code.c...文件内容,是从上往下读取,默认认形成第一个目标文件 习惯上把形成可执行程序放在上面,make就可以直接形成 在编译,默认情况下,如果可执行程序是最新的了,make就不会再去编译,如果就想让编译这个操作总是可以被执行...clean: 8 rm -f $(bin) 此时照样可以编译,在makefile中是可以定义变量

14610

CMake使用教程和原理

Sun工作站使用该imake系统创建Makefile。但是,有时需要Windows端口,gmake才创建了系统。Unix编译器和Windows编译器均可与此gmake基于此的系统一起使用。...1.2 Cmake的使命 创建和源代码库隔离的构建目录,分离开发和构建目录。易于进行源代码版本控制。 CMake是具有管理依赖项,依赖之间的关系。...image.png 2.1 配置阶段 配置阶段解析所有的输入变量,并存储在CMakeCache.txt这个文件。这个阶段解决了用户构建一个项目需要依赖的各种输入参数。...在项目的构建过程中都使用shell级别的环境变量。通常,项目具有指向根目录位置的PROJECT_ROOT环境变量。还有配置可选或外部程序包。要使构建正常进行,每次执行构建都需要设置所有这些外部变量。...image.png 2.3 依赖管理和更新构建 CMake在使用IDE的平台生成依赖,这些依赖由IDE自己完成。

10.7K296

Makefile基本用法

Makefile文件中列出了依赖关系。默认执行第一行。 ? 其中,下面两行等价 ? ? 使用变量简化 添加objects变量后,形成以下简化形式。内容不变。 ?...force给出一行空依赖显式声明,防止force作为%的一员,被隐式自身依赖自身的隐式构建。...html),一般使用-MM显示包含系统头文件的部分即可。...依赖关系生成的格式为:target.o : target.c *.h 在这里将依赖关系写入了每个.d文件名对应的 文件, 的值是当前进程号,每两个 sed的替换命令中,使用逗号作为分隔符,s,g作为开头和结尾....ONESHELL .ONESHELL定义后,在构建一个目标,方法的所有行都将被赋予shell的一次调用,而不是单独调用每一行。

2.5K40

linux下,Makefile是啥??

为什么要学习Makefile? Linux环境下的程序员如果不会使用GNU make来构建和管理自己的工程,应该不能算是一个合格的专业程序员,至少不能称得上是Unix程序员。...在Linux(unix)环境下使用GNU的make工具能够比较容易的构建一个属于你自己的工程,整个工程的编译只需要一个命令就可以完成编译、连接以至于最后的执行。...执行make的依赖性,make会一层又一层地去找文件的依赖关系,直到最终编译出第一个目标文件。...在Makefile中我们要定义一系列的变量变量一般都是字符串,这个有点像你C语言中的 宏,当Makefile被执行时,其中的变量都会被扩展到相应的引用位置上。 文件指示。...为所有的目标文件创建依赖关系链。 根据依赖关系,决定哪些目标要重新生成。 执行生成命令。 Makefile分为多个章节进行书写,有些概念描述参考与某些资料。

1.1K20

命令行上的数据科学第二版:六、项目管理与`make`

至少这允许你和你的合作者复制这个项目。然而,Shell 脚本也是一种次优方法,因为: 很难阅读和维护。 步骤之间的依赖关系不清楚。 每一步每次都要执行,这是低效的,有时也是不可取的。...6.1 概述 使用make管理您的数据工作流是本章的主题。因此,您将了解: 用一个Makefile定义你的工作流。 从输入和输出依赖关系的角度思考工作流。 运行任务和构建目标。...这个过程被称为构建目标。如果你指定一个目标的名字,那么make将构建第一个在Makefile中指定的目标。...这是必要的,因为make使用一个美元符号来表示各种特殊变量,我将在后面解释。 以上摘自我写这本书使用Makefile。你可以说我把make作为一个荣耀的任务运行者。...为了恰当地讨论 Makefile 中的依赖关系,让我们考虑两个与星战角色数据集相关的任务。

66610

Go项目中Makefile的简单使用

变量是大小写敏感的,“foo”、“Foo”和“FOO”是三个不同的变量名。传统的Makefile变量名是全大写的命名方式,但我推荐使用大小写搭配的变量名,如:MakeFlags。...3.2 Go项目的常用命令为什么要说一下Go中的常用命令呢,因为Go项目中Makefile使用较为简单,大多都是对Go命令的一些执行操作,因此我们首先要熟知Go语言中的常用命令,才能更好的编写Makefile...go mod verify:验证mod里依赖是否正确,同时也会验证go源代码其它依赖的内容。go mod why:可以展示及指定依赖关系。...比如代码中有个依赖包,但是并不知道这个包的依赖关系,这时候就可以使用这个命令查看。.../main执行:4 总结Makefile文件是在项目构建这非常重要的一环,最初认识它是在GitHub上的开源项目中,发现每个项目都有一个Makefile,而且语法看不懂,于是就专门抽时间学习一下,当然由于本人初次学习

43300

makefile基础和工作常用点补充

一、Makefile简介 Makefile是什么,能做什么用,为什么要用?...定义编译规则、自动化编译、提高效率 组织文件 Makefile由一组规则(Rule)组成,每条规则的格式是: 例如: 依赖关系如下图: 注意: (1) 当我们为了执行命令而非创建目标文件,就会使用伪目标比如..."="   递归展开变量仅在目标展开才会替换,也就是说它可以引用在后面定义的变量。  ":=" 直接展开变量,在定义就直接展开,它无法后置引用。 "?...=" 表示变量为空或未定义才进行赋值操作。...自动推导依赖关系 gcc –M main.c 自动生成目标文件和源文件的依赖关系; -MM去除系统头文件的依赖关系 maze.d,其内容是 maze.o maze.d:maze.c

1.4K00
领券