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

第一个Makefile问题:没有制定目标的规则

Makefile是一种用于构建软件项目的工具,它使用文本文件描述了项目的依赖关系和构建规则。在Makefile中,规则用于指定如何生成一个或多个目标文件。如果没有制定目标的规则,即没有指定要构建的目标文件,Makefile将无法执行任何操作。

在Makefile中,规则通常由三部分组成:目标、依赖和命令。目标是指规则要生成的文件,依赖是指生成目标所依赖的文件或目标,而命令则是指生成目标的具体操作步骤。

对于没有制定目标的规则,Makefile无法生成任何文件或执行任何操作。这可能是因为开发者遗漏了目标的定义或者出现了错误。

以下是一个示例的Makefile文件:

代码语言:txt
复制
# Makefile示例

# 目标规则
target: dependency
    command

# 依赖规则
dependency:
    command

在这个示例中,target是一个目标规则,它依赖于dependency规则,并且在满足依赖关系后,执行command命令。如果没有制定目标的规则,即没有类似target: dependency这样的规则,Makefile将不会执行任何操作。

针对Makefile中没有制定目标的规则的处理方式,通常有以下几种情况:

  1. 如果这个规则是必要的,开发者需要补充目标定义和相应的依赖关系,并编写适当的命令来生成目标文件。
  2. 如果这个规则是无关紧要的或者不需要执行任何操作,可以忽略这个规则。
  3. 如果这个规则是错误的或者无效的,开发者需要检查Makefile文件中是否存在语法错误或其他问题,并进行相应的修正。

需要注意的是,在回答具体的Makefile问题时,可以根据实际情况和具体要求来给出更详细和全面的答案。

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

相关·内容

深度刨析makefile

那么这就是使用 makefile第一个原因,通过 makefile 可以制定好相应的编译与连接规则,先编译哪个文件后编译哪个文件、哪个需要编译哪个不需要编译、如何链接、如何生成、要生成什么文件等等全部都在...另外,使用 makefile 的第二个原因是,我们在项目开发中难免会对源码进行修修改改,如果每次修改都要重新编译所有的源文件,那么将浪费大量的时间,我们可以在 makefile制定规则,只去编译被修改的源文件...(2)文件搜索 默认情况下,make 会在 makefile 文件所在目录进行搜索规则中所用到的文件,如果我们把所有的文件都和 makefile 文件放在同一个目录下,那肯定是没有问题的,但是世家开发中...声明为伪目标就可以解决这个问题,其实就是把 clean 作为特殊目标 .PHONY 的依赖,这样就保证了不管当前是否有 clean 同名文件,伪目标后面的命令都可以执行,并且 make 不会去推导构建伪目标的隐含规则...比如下面的例子,我们在 makefile 中并没有写以 1.o 为目标的规则,甚至都没有 1.o 这个目标,但是却可以通过 make 来指定 1.o 为最终目标,这是因为 make 根据隐含规则可以推导出

10310

Go项目目录结构应该这么用!

答案是没有。...如果存在,会依据 Makefile 的构建规则去完成构建,在windows环境下可以用GitBash来代替系统命令,或者安装make-4.2.1-without-guile-w32-bin.zip(地址...当然了,实际上 Makefile 内都是你根据 make 语法规则,自己编写的特定 Shell 命令等。它是一个工具,规则也很简单。在支持的范围内,编译 A, 依赖 B,再编译 C,完全没问题。...Makefile 由多条规则组成,每条规则都以一个 target(目标)开头,后跟一个 : 冒号,冒号后是这一个目标的 prerequisites(前置条件),紧接着新的一行,必须以一个 tab 作为开头...无论哪种目录结构都是为了让项目看起来一了解,层次清楚,没有最好的只有合适团队开发的,但是在命名上尽量能和大众规范上保持一致,避免在语义上出现混淆。

2.1K30
  • make menuconfig执行流程分析

    回答这个问题之前,我们要先了解make这个工具的执行过程。...如果你的makefile中的第一个目标是由许多个目标组成,你可以指示make,让其完成你所指定的目标。要达到这一目的很简单,需在make命令后直接跟目标的名字就可以完成(如make clean)。...在Makefile中,在第一个规则之后出现的所有以[Tab]字符开始的行都会被当作命令来处理。...如果你的makefile中的第一个目标是由许多个目标组成,你可以指示make,让其完成你所指定的目标。要达到这一目的很简单,需在make命令后直接跟目标的名字就可以完成(如make clean)。...在Makefile中,在第一个规则之后出现的所有以[Tab]字符开始的行都会被当作命令来处理。

    3.6K10

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

    六、另类风格的makefile 即然我们的make可以自动推导命令,那么我看到那堆[.o]和[.h]的依赖就有点不爽,那么多的重复的[.h],能不能把其收拢起来,好吧,没有问题,这个对于make来说很容易...还有一个要提一下的make的参数的是“-k”或是“–keep-going”,这个参数的意思是,如果某规则中的命令出错了,那么就终规则的执行,但继续执行其它规则。...,我们不必担心这个问题。...其在隐含规则中并没有意义。 4、模式的匹配 一般来说,一个目标的模式有一个有前缀或是后缀的”%”,或是没有前后缀,直接就是一个”%”。...那么这条规则将被采用,退出该算法。 6、如果经过第5步,没有模式规则被找到,那么就做更进一步的搜索。对于存在于列表中的第一个模式规则: 1)如果规则是终止规则,那就忽略它,继续下一条模式规则

    4.3K20

    make与makefile

    命令1 命令2 . . . makefile的使用规则,就好像一个厨师做饭一样,俗话说:巧妇难为无米之炊,再好的厨师,如果没有做饭的食材和工具,照样烧不出好吃的菜肴。...如果目标文件的更新时间晚于依赖文件更新时间,则说明依赖文件没有改动,目标文件不需要重新编译。否则会进行重新编译并更新目标文件。 2、默认情况下Makefile第一个目标为终极目标。...5、all:Makefile文件默认只生成第一个目标文件即完成编译,但是我们可以通过all 指定所需要生成的目标文件。例如下面的例子。...all: target1 target2 target3 target1: # 编译规则1 target2: # 编译规则2 target3: # 编译规则3 all被设置为第一个目标,并且target1...定义伪目标的主要意义在于: 命名约定:通过定义伪目标,可以对常用的操作或任务进行命名约定,使得其他开发者或使用者能够清晰地理解该目标的用途和作用。

    7810

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

    如果要转义行尾字符,请确保在“\”后面没有任何多余的空格或制表符,否则您将收到错误。 文件后缀规则 如果进行文件处理,可以使用的另一个功能是文件后缀。...$@:此变量是当前目标的名称。这允许我们引用您尝试制作的文件,即使此规则通过模式匹配。 $<:这是当前依赖项的名称。对于后缀规则,这是用于创建目标的文件的名称。...如上所述,后缀规则是一种很好的方法。我们将从.SUFFIX声明开始,列出我们之间转换的格式: .SUFFIXES: .jpg .png 之后,我们可以制定一个将.jpg文件更改为.png文件的规则。...如您所见,我们已将.jpeg添加到后缀列表中,并为我们的规则添加了另一个后缀匹配项。 创建一些Targets 我们现在在Makefile中有很多,但我们还没有任何正常的目标。...让我们解决这个问题,以便我们可以将PNG列表传递给后缀规则: JPEG=$(wildcard *.jpg *.jpeg) JPG=$(JPEG:.jpeg=.jpg) PNG=$(JPG:.jpg=.png

    2.3K00

    make menuconfig makefile kconfig详解

    回答这个问题之前,我们要先了解make这个工具的执行过程。...如果你的makefile中的第一个目标是由许多个目标组成,你可以指示make,让其完成你所指定的目标。要达到这一目的很简单,需在make命令后直接跟目标的名字就可以完成(如make clean)。...在Makefile中,在第一个规则之后出现的所有以[Tab]字符开始的行都会被当作命令来处理。...如果一个规则没有命令或者依赖,并且它的目标不是一个存在的文件名。在执行此规则时,目标总会被认为是最新的。就是说:这个规则一旦被执行,make就认为它的目标已经被更新过。...也就是说,__build目标的依赖dochecklxdialog是用来检查生成配置对话框所需的ncurses库是不是已经安装在本机了,如果没有安装,make过程会报错退出。

    1.8K10

    可移植的 Makefile 教程

    本指南不仅适用于之前从来没有写过 Makefile 的 make 初学者,同样适用于想要学习如何写出可移植 Makefile 的资深开发者。...只有一个意外:在 Makefile 中,第一个非特殊的目标会被认为是 默认目标(default target)。当调用 make 但是没有没有指定一个目标时,这个默认目标就会被自动选择。...根据标准,为了获得可靠的 POSIX 行为,Makefile第一个非注释行必须是 .POSIX....如果第一个规则选择了默认目标,我们该如何解决需要多个默认目标的问题呢?传统方式是使用伪目标(phony target)....之所以用“伪”这个词,是因为它们没有相关文件与之关联,所以伪目标永远都不会是最新状态。习惯上,使用伪目标 all 作为默认目标。 我会用 game 作为新的 all 目标的一个先决条件。

    1.3K10

    Makefile 使用总结

    还得要注意的是,这些变量只使用在规则的命令中,而且一般都是"显式规则"和"静态模式规则"(参见前面"书写规则"一章)。其在隐含规则中并没有意义。 1....Makefile 初级语法 2.1 Makefile 规则 2.1.1 规则语法 规则主要有2部分: 依赖关系 和 生成目标的方法...., "makefile", "Makefile", 找到对应文件之后, 就开始执行此文件中的第一个目标(target)....比目标新的依赖目标的集合 $^ 所有依赖目标的集合, 会去除重复的依赖目标 $+ 所有依赖目标的集合, 不会去除重复的依赖目标 $* 这个是GNU make特有的, 其它的make不一定支持 3....下面列举一些常用的伪目标, 如果在自己项目的Makefile合理使用这些伪目标的话, 可以让我们自己的Makefile看起来更专业, 呵呵 :) 伪目标 含义 all 所有目标的目标,其功能一般是编译所有的目标

    3.6K30

    makefile从入门到放弃——博主吐血整理的笔记

    检查没有语法错误以后可以编写makefile文件。...文件: $ make #默认生成第一个文件 $ make '目标名'#选择性的编译 当工程中的文件名和makefile中的目标重名时,就会有伪目标。...-f file读入当前目录下的file文件作为makefile -i 忽略所有命令执行错误 -I dir制定被包含的makefile所在目录 -n 只打印要执行的命令,但是不执行这些命令 -p 显示make...的隐含规则 隐含规则1:编译C语言的隐含规则 .o的目标的依赖目标会自动推导为.c,并且其生成命令是(CC) -c (CPPFLAGS) include config.mk test:$(OBJS)...总之,如果在 Makefile没有对此变量进行显式的赋值操作,那么它就表示 make 的工作目录。

    1.7K20

    Makefile文件编写

    ,它会找文件中的第一个目标文件(target),并把这个文件作为最终的目标文件。...--no-builtin-rules 禁止使用任何隐含规则 -R --no-builtin-variabes 禁止使用任何作用于变量上的隐含规则 -B --always-make 假设所有目标都有更新...典型的伪目标是 Makefile 中用来清理编译过程中中间文件的 clean 伪目标, 一般格式如下: .PHONY: clean <-- 这句没有也行, 但是最好加上 clean: -rm...end make[1]: Leaving directory `/path/to/test/makefile' 主 Makefile end Makefile 隐含规则 这里只列一个和编译C相关的....比目标新的依赖目标的集合 $^ 所有依赖目标的集合, 会去除重复的依赖目标 $+ 所有依赖目标的集合, 不会去除重复的依赖目标 $* 这个是GNU make特有的, 其它的make不一定支持 all

    1.2K30

    一步步写属于自己的makefile

    这样,在解决问题的兴奋中,逐渐也掌握了makefile编写的真谛。希望对大家有帮助。 1 makefile初探 如果没有makefile,我们编译C或者C++代码只能是手动一个个敲,然后再编译。...makefile隐含规则 .o文件对.c文件的规则会自动执行,所以上面的makefile可以只保留下面的代码: hello : hello.o gcc -o hello hello.o...hello hello.o hello1.o hello2.o hello3.o hello4.o hello5.o hello6.o hello7.o hello8.o hello9.o 这完全没有问题...使用上没有任何问题,但是,我们发现上面的.o目标文件遵循就近原则,散落在各个目录下。...上面的代码有一个问题就是,如果你改动了.c文件。代表依赖关系改变了,会重新编译那个文件。但是,修改头文件不会引起重新编译,因为编译器认为没有发生依赖关系上的改动。

    64130

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

    六、另类风格的makefile 既然我们的make可以自动推导命令,那么我看到那堆[.o]和[.h]的依赖就有点不爽,那么多的重复的[.h],能不能把其收拢起来,好吧,没有问题,这个对于make来说很容易...第五部分、书写规则 规则包含两个部分,一个是依赖关系,一个是生成目标的方法。...由于伪目标的特性是,总是被执行的,所以其依赖的那三个目标就总是不如“all”这个目标新。所以,其它三个目标的规则总是会被决议。也就达到了我们一口气生成多个目标的目的。...prereq-parrterns是目标的依赖模式,它对target-parrtern形成的模式再进行一次依赖目标的定义。 这样描述这三个东西,可能还是没有说清楚,还是举个例子来说明一下吧。...还有一个要提一下的make的参数的是“-k”或是“--keep-going”,这个参数的意思是,如果某规则中的命令出错了,那么就终规则的执行,但继续执行其它规则

    3.2K20

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

    下面这条线,seq 7,被称为规则 。把一个规则想象成一个食谱;一个或多个指定如何构建目标的命令。 规则前面的空格是一个制表符。对空格很挑剔。...如果你不指定一个目标的名字,那么make将构建第一个Makefile中指定的目标。...在你的Makefile的顶部使用一个名为.PHONY的特殊目标,后跟虚假目标的名字,这是一个很好的做法。...没有必要重建目标numbers,因为文件numbers已经存在。这很好,因为make通过不重复工作节省了我们的时间。 在make里,都是关于文件的。但是要记住make只关心目标的名称 。...图 6.2:目标之间的依赖关系 让我们依次讨论每个目标: 目标all有两个依赖项,但没有规则。这就像是按指定顺序执行一个或多个目标的快捷方式。在这种情况下:top10``heights.png。

    68410

    makefile

    1-5步为第一个阶段,6-7为第二个阶段。第一个阶段中,如果定义的变量被使用了,那么,make会把其展开在使用的位置。...下面对makefile的相关问题进行简单介绍: 1、Makefile的基本结构 Makefile的一般结构: target……:dependency…… command…… 结构中各部分的含义: (1...一个makefile文件中可定义多个目标,利用make target命令可指定要编译的目标,如果不指定目标,则使用第一个目标。...——所有比目标新的依赖目标的集合,以空格分隔。 $^ ——所有的依赖目标的集合,以空格分隔。如果在依赖目标中有多个重复的,那个这个变量会去除重复的依赖目标,只保留一份。...它会继续载入其它的文件,一旦完成makefile的读取,make会再重试这些没有找到,或是不能读取的文件,如果还是不行,make才会出现一条致命信息。

    2K00

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

    里面的gcc命令) 我们看到,可执行文件myfile就生成了 执行: 没有问题。...所以,clean我们直接这样写就行 然后,我们make clean的时候,他就会自动执行clean对应的依赖方法 3.5 make默认只执行makefile文件中的第一个目标规则 那经过上面的学习...如果没指定,默认情况下,它只会执行makefile文件中的第一个目标规则。...而我们上面写的,生成myfile的目标规则是在第一个,而清理的在后面,所以,我们不指定的话,默认执行的就是第一个即生成myfile的操作。...还是以这个为例 大家看 我两次执行make(不指定默认是第一个即make myfile),有什么不同。 第一次make执行了makefile文件中的第一个目标规则,并生成了对应的文件。

    25910
    领券