在Solaris服务器中从源代码编译Git时出现问题(多目标模式错误)

在Solaris服务器中从源代码编译Git时出现问题(多目标模式错误),git,makefile,solaris,Git,Makefile,Solaris,我试图在Solaris机器(SunOS服务器名称5.11.4.0.15.0 sun4v sparc sun4v)上从源代码()编译git 当我使用make时,不断出现以下错误: -bash-4.4$ gmake Makefile:2511: *** multiple target patterns. Stop. 有什么建议吗 下面是从源代码到右行的链接: 编辑: 正在添加用于尝试的gmake版本: -bash-4.4$ gmake -v GNU Make 4.2.1 Built for

我试图在Solaris机器(SunOS服务器名称5.11.4.0.15.0 sun4v sparc sun4v)上从源代码()编译git

当我使用make时,不断出现以下错误:

-bash-4.4$ gmake 
Makefile:2511: *** multiple target patterns.  Stop.
有什么建议吗

下面是从源代码到右行的链接:

编辑: 正在添加用于尝试的gmake版本:

-bash-4.4$ gmake -v
GNU Make 4.2.1
Built for sparc-sun-solaris2.11
Copyright (C) 1988-2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

没办法从这件事上知道。这完全取决于
对象
LIB_H
生成的_H
变量的值。您可以尝试将
$(info OBJECTS=$(OBJECTS))
之类的内容添加到makefile中以打印这些值

中描述了此错误,其中说明了此错误:

这些错误是为格式错误的静态模式规则生成的(请参见静态模式规则的语法)。[它]表示目标模式部分[…]中有多个模式字符(%)

看起来GNU make检测到的一些文件名中包含百分比
%
字符;make不喜欢那样

此外,在询问GNU make问题时,特别是在非Linux平台上,提供您正在使用的GNU make版本(
make--version
)也很有帮助——这在任何地方都很有帮助,但在Linux系统上,大多数人都在使用最新版本或接近最新版本。在其他系统上,人们可能正在使用非常旧的版本

ETA

嗯,我不能很好地解释为什么你会看到这个确切的错误,但问题的根源是清楚的。如果你看一下
LIB_H
的内容,你会发现里面有各种各样与版权、版本信息等有关的废话,而不仅仅是文件名:

LIB_H=LIB_H=(C) (at (sparc-sun-solaris2.5.1), 09:52:57 1 1993-1998 1998 2, 4.3.17 Andrei Bucharest, Copyright Foundation, Foundation; Free GIT GNU General Hulubei Inc. Interactive Jun License Pitis, Public Romania Software Tools Tudor Written add-interactive.h ...
很明显,这个变量只包含文件名,而不是其他垃圾文件。显然,您系统上的某些工具正在“有益地”生成一系列出乎意料的额外输出

该值通过以下语句填写:

LIB_H := $(sort $(patsubst ./%,%,$(shell git ls-files '*.h' ':!t/' ':!Documentation/' 2>/dev/null || \
    $(FIND) . \
    -name .git -prune -o \
    -name t -prune -o \
    -name Documentation -prune -o \
    -name '*.h' -print)))
其中,我怀疑罪魁祸首是您的
git
,它可能不是“标准”git,而是其他版本

如果运行该命令:

git ls-files '*.h' ':!t/' ':!Documentation/' 2>/dev/null

从shell提示符(在这个Git repo中)您看到了这个版权输出吗?

无法从中得知。这完全取决于
对象
LIB_H
生成的_H
变量的值。您可以尝试将
$(info OBJECTS=$(OBJECTS))
之类的内容添加到makefile中以打印这些值

中描述了此错误,其中说明了此错误:

这些错误是为格式错误的静态模式规则生成的(请参见静态模式规则的语法)。[它]表示目标模式部分[…]中有多个模式字符(%)

看起来GNU make检测到的一些文件名中包含百分比
%
字符;make不喜欢那样

此外,在询问GNU make问题时,特别是在非Linux平台上,提供您正在使用的GNU make版本(
make--version
)也很有帮助——这在任何地方都很有帮助,但在Linux系统上,大多数人都在使用最新版本或接近最新版本。在其他系统上,人们可能正在使用非常旧的版本

ETA

嗯,我不能很好地解释为什么你会看到这个确切的错误,但问题的根源是清楚的。如果你看一下
LIB_H
的内容,你会发现里面有各种各样与版权、版本信息等有关的废话,而不仅仅是文件名:

LIB_H=LIB_H=(C) (at (sparc-sun-solaris2.5.1), 09:52:57 1 1993-1998 1998 2, 4.3.17 Andrei Bucharest, Copyright Foundation, Foundation; Free GIT GNU General Hulubei Inc. Interactive Jun License Pitis, Public Romania Software Tools Tudor Written add-interactive.h ...
很明显,这个变量只包含文件名,而不是其他垃圾文件。显然,您系统上的某些工具正在“有益地”生成一系列出乎意料的额外输出

该值通过以下语句填写:

LIB_H := $(sort $(patsubst ./%,%,$(shell git ls-files '*.h' ':!t/' ':!Documentation/' 2>/dev/null || \
    $(FIND) . \
    -name .git -prune -o \
    -name t -prune -o \
    -name Documentation -prune -o \
    -name '*.h' -print)))
其中,我怀疑罪魁祸首是您的
git
,它可能不是“标准”git,而是其他版本

如果运行该命令:

git ls-files '*.h' ':!t/' ':!Documentation/' 2>/dev/null

从shell提示符(在这个Git repo中)可以看到这个版权输出吗?

Solaris特别倾向于使用非常旧的GNU实用程序。Git回购确实可以在更现代的系统上使用gmake构建。疯狂科学家,我将发布我根据你的建议获得的大量信息。谢谢你提供的信息。发现两件事:1)makefile在某些步骤中使用“git”。2) 我们服务器中的“git”命令是“GNU交互式工具”,而不是git本身。这就是错误。哦,哇,这是过去的爆炸。GNU交互式工具包不久前被重命名为gnuit,git包名被git接管。您必须到处查看安装包的位置,才能找到该系统的Git源代码管理包的名称。尤其是Solaris,它往往有非常古老的GNU实用程序。Git回购确实可以在更现代的系统上使用gmake构建。疯狂科学家,我将发布我根据你的建议获得的大量信息。谢谢你提供的信息。发现两件事:1)makefile在某些步骤中使用“git”。2) 我们服务器中的“git”命令是“GNU交互式工具”,而不是git本身。这就是错误。哦,哇,这是过去的爆炸。GNU交互式工具包不久前被重命名为gnuit,git包名被git接管。您必须到处查看安装包的位置,才能找到该系统的Git源代码管理包的名称。