Recursive makefile 没有规则使目标“全部”。停止

     2023-02-22     146

关键词:

【中文标题】Recursive makefile 没有规则使目标“全部”。停止【英文标题】:Recursive makefile No rule to make target `all'. Stop 【发布时间】:2014-12-21 23:55:04 【问题描述】:

该项目是关于一个包含 src 目录的根目录。我创建了两个 makefile,一个在顶层目录,另一个在 src 目录。这是src目录的makefile:

## Process this file with automake to produce Makefile.in

## Created by Netbeans

AM_CPPFLAGS = \
   -DPACKAGE_LOCALE_DIR=\""$(localedir)"\" \
   -DPACKAGE_SRC_DIR=\""$(srcdir)"\" \
   -DPACKAGE_DATA_DIR=\""$(pkgdatadir)"\"


bin_PROGRAMS = scratchautotool

program_INCLUDE_DIRS := /usr/bin/PR__bin

program_LIBRARY_DIRS := /usr/lib/PR__lib

CFLAGS += $(foreach includedir,$(program_INCLUDE_DIRS),-I$(includedir))

AM_LDFLAGS += $(foreach librarydir,$(program_LIBRARY_DIRS),-L$(librarydir))

scratchautotool_SOURCES = \
     main.c \
     Task.c \
     SeedVP.c

depend :
    makedepend --$(CFLAGS) --$(scratchautotool_SOURCES)

根目录的makefile如下图:

## Process this file with automake to produce Makefile.in
## Created by Netbeans

   SUBDIRS = src

   scratchautotooldocdir = $prefix/doc/scratchautotool
   scratchautotooldoc_DATA = \
          README\
          COPYING\
          AUTHORS\
          ChangeLog\
          INSTALL\
          NEWS

    INTLTOOL_FILES = intltool-extract.in \
      intltool-merge.in \
      intltool-update.in

    EXTRA_DIST = $(scratchautotooldoc_DATA) \
          $(INTLTOOL_FILES)

    DISTCLEANFILES = intltool-extract \
          intltool-merge \
          intltool-update \
         po/.intltool-merge-cache

   # Remove doc directory on uninstall
   uninstall-local:
   -rm -r $(scratchautotooldocdir)

但是当我从终端调用 make 时,它给了我以下错误:

   Making all in src
   make[2]: Entering directory `../src'
   make[2]: *** No rule to make target `all'.  Stop.
   make[2]: Leaving directory `../src'

【问题讨论】:

--$(scratchautotool_SOURCES) 将扩展到--main.c Task.c SeedVP.c,这很可能不是您想要或想要的。同样,--$(CFLAGS) 将扩展到 ---I/usr/bin/PR__bin(或者可能是 -- -I/usr/bin/PR__bin,我必须对其进行测试才能确定),但在任何一种情况下都不太可能是您想要的。 @Etan 我的源目录包含 3 个文件和两个头文件,我使用 makedepend 自动生成依赖规则并避免任何错误我可以这样做你的意思是这是错误的,关于 cflags,我有一个文件夹,里面有很多main.c、seedvp.c等在代码中用到的头文件 我的意思是在 makedepend 行上使用这些变量几乎肯定是不正确的,因为你有太多的破折号(除非 makedepend 有一些奇怪的参数要求)。只需查看当您运行make depend 时make 指示它正在运行的命令即可了解我的意思。为简单起见,那些foreach 循环也可以替换为CFLAGS += $(addprefix -I,$(program_INCLUDE_DIRS))AM_LDFLAGS += $(addprefix -L,$(program_LIBRARY_DIRS)) 我运行 makedepend 它给了我这个错误 No rule to make target `depend'。停止。 depend 目标很可能只在src 目录中有效。 【参考方案1】:

错误很明显:它期望找到目标all,但没有找到。我假设您在没有指定目标的情况下调用了make;默认是(惊喜!)all

【讨论】:

对不起,如果我的问题似乎是微不足道的,但正如我之前所说,我是初学者;所以你的意思是我应该把 all: 添加到我的 makefile 但添加到哪个文件或者你的意思是什么? @Sara - 是的,只需将 all: 目标添加到您的 Makefile。您可以简单地将已经存在的目标添加到 all 语句中。示例:'all:depend' 它只会成为你的依赖目标。 makefile 中的默认目标是第一个列出的目标。 all 按照惯例用作该目标,但任何目标都可以。这意味着这里的问题是运行make all 并且没有列出这样的目标。运行make 将构建第一个目标。【参考方案2】:

我想与遇到相同问题的任何人分享我的问题的解决方案,我已经修改了makefile,如下所示:

all: scratchautotool
depend :
       makedepend $(CFLAGS) $(scratchautotool_SOURCES)

但这也给出了同样的错误,所以我搜索并发现 makedepend 不存在所以我必须使用以下命令安装 xutils-dev 包(其中包括程序 makedepend):

  sudo apt-get install xutils-dev

但是这个命令只解决了上面提到的问题!但是makefile现在有一个新问题:)

【讨论】:

有没有办法定义全局 Makefile(隐式)规则?

】有没有办法定义全局Makefile(隐式)规则?【英文标题】:IsthereawaytodefineglobalMakefile(implicit)rules?【发布时间】:2021-09-0909:25:34【问题描述】:即使目录中没有Makefile,我也可以通过运行maketest来编译c程序test.c。那是因为make有bui... 查看详情

Makefiles 链是一团糟:没有规则来制作目标

】Makefiles链是一团糟:没有规则来制作目标【英文标题】:ChainofMakefilesareamess:noruletomaketarget【发布时间】:2017-06-1411:42:55【问题描述】:在一个转换项目中,我修改并重新修改了现有的makefile链,但设法破坏了它。当我为一个没... 查看详情

nmake makefile 没有使用推理规则

】nmakemakefile没有使用推理规则【英文标题】:nmakemakefileisnotusinginferencerule【发布时间】:2018-06-1214:19:45【问题描述】:我正在尝试获取目标的对象依赖项以使用推理/隐式规则。我得到了这个错误NMAKE:致命错误U1073:不知道如何... 查看详情

makefile中的规则(代码片段)

makefile规则基本格式  一条makefile规则由以下几部分组成:target...:prerequisites...  recipe  ...  ...  Pleasenote:youneedtoputatabcharacteratthebeginningofeveryrecipeline!    makefile没有在命令行中指定执行哪部分时候,第一个targe... 查看详情

makefile总述②

Makefile的内容  在一个完整的Makefile中,包含了5个东西:显式规则、隐含规则、变量定义、指示符和注释。显式规则:它描述了在何种情况下如何更新一个或者多个被称为目标的文件(Makefile的目标文件)。书写Makefile时需要明... 查看详情

没有规则使目标'openmp'?

...\'openmp\'?【发布时间】:2015-08-2617:33:27【问题描述】:makefile中定义了以下内容:CXX=g++CXXFLAGS=-std=c++11我想用OpenMP指令编译我的代码,而不更改原始的makefile(运行完美)。该手册建议了一种方法来执行此操作,即在命令行上更... 查看详情

makefile(06)_隐式规则(代码片段)

...:通过各目标的命令拆分写到不同的地方,会发生什么?Makefile中出现同名目标时:依赖:所有的依赖将合并到一起,成为目标的最终依赖命令:当多处出现同一目标的命令时,make发出警告,所有之前定义的命令被最后的命令取... 查看详情

makefile(代码片段)

makemake:linux自带构建器,构建规则在makefile中makefile文件的命名:makefile,Makefilemakefile中的规则可分为三部分:目标,依赖,命令格式:目标:依赖(tab缩进)命令工作原理:  检测依赖是否存在,向下搜索规则,如果有规则是用来生成查找依赖... 查看详情

make和makefile(代码片段)

目录概述makefilemakefile的基本语法变量常用make命令选项例子参考概述make是控制如何从源文件(sourcefile)生成可执行文件(excutable)及其他非源文件(non-sourcefile)的一种工具。make工具通过makefile中说明的方式,构建(build)整个程序(program)... 查看详情

通用生成文件显示没有生成目标错误的规则

...文件显示没有生成目标错误的规则【英文标题】:Genericmakefileshowingnoruletomaketargeterror【发布时间】:2016-04-0507:06:18【问题描述】:我编写了一个makefile来编译和链接我项目中的所有文件。现在我只有2个cpp文件:src/main.cpp和src/DBEng... 查看详情

(转)makefile介绍

2.Makefile介绍make命令执行时,需要一个Makefile文件,以告诉make命令需要怎么样的去编译和链接程序。首先,我们用一个示例来说明Makefile的书写规则。以便给大家一个感性认识。这个示例来源于GNU的make使用手册,在这个示例中,... 查看详情

makefile双冒号规则

...目标指定不同的重建目标的命令)。首先需要明确的是:Makefile中,一个目标可以出现在多个规则中。但是这些规则必须是同一类型的规则,要么都是普通规则,要么都是双冒号规则。而不允许一个目标同时出现在两种不同类型... 查看详情

c语言本质

...多个源文件编译链接而成,这些源文件的处理步骤通常用Makefile来处理。Makefile包含基本规则、隐含规则、模式规则,它能够自动处理头文件的依赖关系,常用make命令行选项。在c语言的编译下,main是这条规则的目标(Target),... 查看详情

makefile 书写规则

1.1Makefile的规则 在讲述这个Makefile之前,还是让我们先来粗略地看一看Makefile的规则。 target...:prerequisites...  command  ...  ... target也就是一个目标文件,可以是ObjectFile,也可以是执行文件。还可以... 查看详情

make--makefile

makefile重要的三个概念:目标依赖关系命令一make与makefilemake是一个应用程序1.解析源程序之间的依赖关系2.根据依赖关系自动维护编译工作3.执行宿主操作系统中的各种命令makefile是一个描述文件1.定义一系列的规则来指定源文件... 查看详情

makefile文件_书写规则

Makefile书写规则包含两部分,一个是依赖关系,一个是生成目标。在Makefile中,规则的顺序很重要,因为Makefile中只有一个最终目标。一般,定义在Makefile中的目标可能会有很多,但是第一条规则中的目标将被确立为最终目标。如... 查看详情

makefile总述

Makefile总述1、Makefile组成元素Makefile五大元素:显示规则、隐晦规则、变量定义、文件指示、注释。1、显式规则。显式规则说明了,如何生成一个或多的的目标文件。这是由Makefile的书写者明显指出,要生成的文件,文件的依赖... 查看详情

makefile失败-隐式规则编译一个目标文件但不编译其余文件(代码片段)

Makefile没有正确使用隐式规则。我正在关注本指南here。这是我的makefile:objects=main.ohello.ohello:$(objects)cc-ohello$(objects)hello.o:defs.hmain.o:defs.hhello.h.PHONY:cleanclean:-rmhello$(objects)我收到以下错误:cc:error:main.o:Nosuc 查看详情