【问题标题】:Specifying different GNUmakefile for GNU make command为 GNU make 命令指定不同的 GNUmakefile
【发布时间】:2013-11-22 01:37:53
【问题描述】:

我的目录中有两个 GNUmakefile,如下所示,

GNUmakefile & GNUmakefile2

如果我必须让“make”命令处理“GNUmakefile2”而不是“GNUmakefile”,请告诉我必须使用的命令。

我使用了以下命令,
ma​​ke -f GNUmakefile2

但在这种情况下,我收到以下错误,

这是 gnustep-make 2.6.1。输入“make print-gnustep-make-help”寻求帮助。

make[1]: ** 没有规则来制作目标“internal-master-tool-all”。停止。*

make: ** [internal-all] 错误 2*

我认为它正在考虑将 GNUmakefile 作为 makefile(当我使用带有 -f 命令的 make 时),所以它正在检查 GNUmakefile 中的规则。

目前我正在做的是将所需文件(我想要执行的命令)重命名为“GNUmakefile”。而且我在执行“make”命令时没有收到任何错误,但我认为这不是正确的解决方案。

请告诉我在这种情况下我需要使用哪个命令。感谢您的帮助。

在检查了 Beta 的解决方案之后(即,该 makefile 正在第二次调用 Make,并且第二个 Make 进程可能正在读取 GNUmakefile)我所做的就是将现有的“GNUmakefile”重命名为“GNUmakefile3”。

所以目前在我的目录中存在以下makefile:-“GNUmakefile2”和“GNUmakefile3”。

然后我执行了以下命令:- $ make -f GNUmakefile2

我收到以下错误,

这是 gnustep-make 2.6.1。输入“make print-gnustep-make-help”寻求帮助。
make[1]: GNUmakefile: 没有这样的文件或目录
make[1]: * 没有规则来制作目标 `GNUmakefile'。停止。
make: *
[internal-all] 错误 2

请告诉我这里有什么问题

【问题讨论】:

  • make -f GNUmakefile2 是正确的命令,但该 makefile 正在第二次调用 Make,而第二个 Make 进程可能正在读取 GNUmakefile,因为这是默认设置。你能告诉我们GNUmakefile2吗?为了解决这个问题,我们可能需要对其进行修改。
  • 请找到GNUmakefile2的以下内容,包括$(GNUSTEP_MAKEFILES)/common.make LIBRARY_NAME = libHelloWorld libHelloWorld_HEADER_FILES = HelloWorld.h libHelloWorld_HEADER_FILES_INSTALL_DIR = HelloWorld libHelloWorld_OBJC_FILES = HelloWorld.m include $(GNUSTEP_MAKEFILES)/library.make请让我知道这里有什么问题。感谢您的帮助。
  • @Beta:我根据您的输入修改了问题,请检查。
  • 这证实了我的理论;其中一个 makefile 包含类似“$(MAKE) -f GNUMakefile internal-master-tool-all”的命令。请告诉我们common.makelibrary.make
  • 您好,请在以下链接中找到 common.make:- pastebin.com/gKNXz7LH 请在以下链接中找到 library.make:- pastebin.com/H6YMjkUu 请检查。感谢您的帮助。

标签: makefile gnu gnu-make


【解决方案1】:

您的 makefile 包含来自 FSF 的两个巨大的 makefile。第二个,library.make,包含这条规则:

ifeq ($(GNUSTEP_MAKE_PARALLEL_BUILDING), no)
# Standard building
...
else
# Parallel building. ...
internal-library-all_:: $(GNUSTEP_OBJ_INSTANCE_DIR) $(OBJ_DIRS_TO_CREATE)
    $(ECHO_NOTHING_RECURSIVE_MAKE)$(MAKE) -f $(MAKEFILE_NAME) ...
endif

第一个,common.make 包含这个分配:

# The default name of the makefile to be used in recursive invocations of make
ifeq ($(MAKEFILE_NAME),)
  MAKEFILE_NAME = GNUmakefile
endif

所以试试 make -f GNUmakefile2 GNUSTEP_MAKE_PARALLEL_BUILDING=nomake -f GNUmakefile2 MAKEFILE_NAME=GNUmakefile2,看看是否能解决问题。

【讨论】:

  • 嗨,非常感谢。 “make -f GNUmakefile2 MAKEFILE_NAME=GNUmakefile2”命令有效。其他命令(即 make -f GNUmakefile2 GNUSTEP_MAKE_PARALLEL_BUILDING=no)不起作用。我仍然很困惑为什么“make”命令被递归调用。再次感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2018-12-22
  • 2014-07-10
  • 2010-12-24
  • 1970-01-01
  • 2017-06-20
  • 2019-07-07
  • 2015-03-19
  • 1970-01-01
相关资源
最近更新 更多