Makefile 构建OpenJDK时的混乱参数

Makefile 构建OpenJDK时的混乱参数,makefile,openjdk,Makefile,Openjdk,在尝试构建OpenJDK时,我在执行makeall时遇到了一系列错误: /usr/bin/make: invalid option -- '8' /usr/bin/make: invalid option -- '/' /usr/bin/make: invalid option -- 'a' /usr/bin/make: invalid option -- '/' /usr/bin/make: invalid option -- 'c' 运行make all LOG=trace JOBS=1

在尝试构建OpenJDK时,我在执行
makeall
时遇到了一系列错误:

/usr/bin/make: invalid option -- '8'
/usr/bin/make: invalid option -- '/'
/usr/bin/make: invalid option -- 'a'
/usr/bin/make: invalid option -- '/'
/usr/bin/make: invalid option -- 'c'
运行
make all LOG=trace JOBS=1

+ /usr/bin/make VERBOSE= LOG_LEVEL=trace -R -I /home/ft/openjdk8/make/common -f adlc.make -r -rRw -I/home/ft/open -j1 -dk8/make/common -I/home/ft/openjdk8/make/common -I/home/ft/openjdk8/make/common -I/home/ft/openjdk8/make/common -I/home/ft/openjdk8/make/common
这是一个糟糕的论点。相关部分为
-I/home/ft/open-j1-dk8/make/common
<代码>grep-R'I/home/ft/open-j1-dk8/make/common'只显示日志。这在
/configure--enable debug
和不启用时发生

我找到了一个看起来很相似的人,但他似乎放弃了


编辑:搜索
-ji
make/hostpotwrapper.gmk
@($(CD)$(hostpot\u TOPDIR)/make&&$(make)-j1$(hostpot\u make\u ARGS)SPEC=$(hostpot\u SPEC)BASE\u SPEC=$(BASE\u SPEC))
是破坏东西的主要候选对象

这似乎是已记录的bug()的一部分。修复方法是将make降级到3.82,这确实可以编译OpenJDK。

下面是它为我做的事情。在热点目录中应用以下修补程序:

diff -r 87ee5ee27509 make/linux/makefiles/adjust-mflags.sh
--- a/make/linux/makefiles/adjust-mflags.sh Tue Mar 04 11:51:03 2014 -0800
+++ b/make/linux/makefiles/adjust-mflags.sh Wed Sep 30 16:51:55 2015 -0700
@@ -64,7 +64,6 @@
    echo "$MFLAGS" \
    | sed '
        s/^-/ -/
-       s/ -\([^    ][^     ]*\)j/ -\1 -j/
        s/ -j[0-9][0-9]*/ -j/
        s/ -j\([^   ]\)/ -j -\1/
        s/ -j/ -j'${HOTSPOT_BUILD_JOBS:-${default_build_jobs}}'/

看起来其中一条规则太宽了,如果它们包含一个j并且恰好在一个破折号之后,那么它就匹配了随机目录。

一些东西正在运行一个类似于
s/jd/j1-/
的替换,这将
I/home/ft/openjdk8/make/common
变成
-I/home/ft/open-j1-dk8/make/common
。这似乎是试图在make上强制执行最大数量的作业(与裸
-j
的默认无界行为相反)。我还想知道是什么导致了
-I
参数被重复了这么多次(尽管这可能是正常的不良操作,并且这次运行没有特别的损坏/错误)。任何人都能提供帮助的唯一方式是,如果您在调用子make的makefile中找到规则,并显示该规则。一旦变量等由make展开,如您所见,损坏已经完成,并且没有来自makefile的内容(在损坏之前)我们不知道发生了什么。@Madscient我在make方面的大部分经验都是作为最终用户,您对我如何做有什么建议吗?搜索
-f adlc.make
出现
@$(make)-f adlc.make$(MFLAGS调整)
热点/make/linux/makefiles/top.make中,但这似乎不是顶级make,因为在-f之前有额外的参数。