本篇文章主要介绍在 MacOS 系统和 Ubuntu 系统上如何编译 OpenJDK 项目代码,并使用 IDE 工具 JetBrains CLion (下文简称 CLion )来运行/调试 OpenJDK

文中仅包含两种操作系统的特定版本( MacOS 10.15 Ubuntu 16.04 )下的方法,不同版本下可能会略有差异。希望对读者有一定的参考价值。

总体来说,编译 OpenJDK11 在两种系统上都没有太大的阻碍,难度低于 OpenJDK8 。编译 OpenJDK8 Ubuntu 上比较简单,在 MacOS 上比较繁琐复杂。

编译调试OpenJDK的基本步骤

完成编译并实现调试 OpenJDK 流程可以分为以下几个步骤:

  • 获取 OpenJDK 项目源代码
  • 下载一个合适版本的 JDK 作为 BootJDK
  • 下载所需工具链,包括编译器、调试器、构建工具等
  • 下载所需依赖库
  • Running Configure (配置)
  • Running Make (构建)
  • 导入 CLion 并进行 Run/Debug 配置
  • 其中3-6步对于不同操作系统和不同 OpenJDK 版本差异较大,其余步骤差异较小,所以本文的行文顺序是先将1-2、7三部分以及一些前置知识做详细介绍。在之后的具体场景(不同操作系统 + 不同 OpenJDK 版本)中针对对这些部分只做差异点的特殊说明。

    如何获取 OpenJDK 源代码?

    编译调试的第一步当然是获取到 OpenJDK 的源代码,获取方式主要有以下三种:

    1. 通过 OpenJDK 官方的 Mercurial 仓库下载

    OpenJDK 官方使用 Mercurial 来进行版本控制。 Mercurial 仓库地址: http://hg.openjdk.java.net/ ,主要项目地址:

    通过这种方式下载源代码,需要先安装 Mercurial 工具,并使用 hg clone <url> 下载源代码。比如下载 jdk8u 使用如下命令:

    hg clone http://hg.openjdk.java.net/jdk8u/jdk8u/
    

    这种方式下载比较慢,而且会有中断的情况,不推荐使用

    2. 通过镜像Git仓库下载

    OpenJDK官方在GitHub上有JDK项目的仓库镜像,主页地址:https://github.com/openjdk,主要项目地址:

    使用这种方式需要安装git工具,并使用git clone <url>下载源代码。比如下载jdk8u使用如下命令:

    git clone https://github.com/AdoptOpenJDK/openjdk-jdk8u
    

    git工具使用方便,并且比从官方Mercurial仓库下载要快很多,推荐使用

    3. 下载Mercurial仓库或者Git仓库 打包文件

    除此之外,OpenJDK官方的Mercurial仓库还提供了直接下载压缩包的入口,入口在各个项目页面左侧bz2,zip,gz三个链接,点击即可下载。如下图所示:

    同样在GitHub上的每个项目都可以下载ZIP格式的打包文件。如下图所示:

    显然这种方式的缺点是缺少版本控制的能力,如果对项目代码进行了改动想要恢复是做不到的,也不能够方便地获取最新代码改动,但是相比前两种方式更下载更快,也不要任何额外工具。

    如何下载JDK?

    让人觉得矛盾的是,编译JDK之前我们需要一个已经编译好的JDK作为Boot JDK。一般需要的JDK版本是编译版本前一版本的JDK,比如编译JDK8需要JDK7,编译JDK11需要JDK10
    有几种途径可以下载JDK

  • Oracle官网下载 Oracle JDK。下载需要登录账号
  • 下载OpenJDK
  • https://jdk.java.net/可以找到Oracle提供的基于OpenJDK的参考实现。但大部分只有Linux版本
  • 也可以使用其他组织预编译好的OpenJDK。比如AdoptOpenJDK,但是没有jdk8以下版本
  • Linux系统下,还可以通过软件包管理器(比如Ubuntu下的aptCentos下的yum)下载安装JDK
  • JSON Compilation Database

    CLionCMake构建的项目支持很友好,但OpenJDK项目是基于Make构建的,对于使用Make构建的项目,CLion仍然可以通过Compilation Database来导入项目,而不用将其修改为CMake项目。同时也能通过Compilation Database实现代码的分析、跳转等功能,这对于我们进行代码调试很有帮助。

    有关于Compilation Database的介绍可以参考这几篇文章:

  • Clang官方的Compilation Database介绍页面:JSON Compilation Database Format Specification — Clang 11 documentation
  • 这篇文章介绍了在不同场景下生成Compilation database的各种工具:Compilation database — Sarcasm notebook
  • CLion的帮助页面简要介绍了Compilation Database,以及在CLion的使用:Compilation Database - Help | CLion
  • 对于基于Make构建的OpenJDK项目来说,有一些工具可以生成Compilation Database,比如下面几个:

  • https://github.com/rizsotto/Bear
  • https://github.com/rizsotto/scan-build
  • https://github.com/nickdiego/compiledb
  • 通常默认生成的Compilation Database是一个compile_commands.json文件。

    除此之外,在OpenJDK 11u及之后版本中,OpenJDK官方提供了对于IDE的支持,可以使用make compile-commands命令生成Compilation Database,不需要使用额外的工具,具体命令可以查看看源代码目录下的\doc\ide.md

    如何将OpenJDK项目导入CLion中并运行/调试

    读者可以选择先跳过本小节,然后在完成前面几个步骤之后再来根据本小节进行导入调试。

    对于如何在CLion中管理基于Make构建的项目,CLion的官方帮助文档中有详细的介绍:
    Managing Makefile Projects

    参考上述文档,本小节简要介绍了如何在CLion中导入OpenJDK项目并运行/调试的方法。请注意小节中所展示的图示是基于Ubuntu 16.04系统 + CLion 2020.1.1 环境下的,操作步骤基本也适用于MacOS 系统下同版本的CLion

    下载安装CLion,并安装Makefile Support插件。建议使用最新版本,比较老的版本是不支持Make构建的项目的。

    导入项目。打开CLion,选择Open Or Import,选择项目目录中的compile_commands.json文件,弹出框选择Open as Project,等待文件索引完成。

    compile_commands.json的生成方法及生成位置根据不同的OpenJDK版本略有不同,具体位置请看下文具体场景的介绍。

    创建自定义Build Target。点击File菜单栏,Settings | Build, Execution, Deployment | Custom Build Targets,点击+新建一个 Target

  • NameTarget的名字,之后在创建Run/Debug配置的时候会看到这个名字
  • 点击Build或者Clean右边的三点,弹出框中点击+新建两个External Tool配置如下:
    # 第一个配置如下,用来指定构建指令
    # Program 和 Arguments 共同构成了所要执行的命令 "make all"
    Name: make
    Program: make
    Arguments: all
    Working directory: {项目的根目录}
    # 第二个配置如下,用来清理构建输出
    # Program 和 Arguments 共同构成了所要执行的命令 "make clean"
    Name: make clean
    Program: make
    Arguments: clean
    Working directory: {项目的根目录}
    
  • ToolChain选择DefaultBuild选择make(上面创建的第一个External Tool);Clean选择make clean(上面创建的第二个External Tool
  • 其中两个External Tool配置中make的参数可以根据需要改变。一般情况用于Build的配置与执行构建时maketarget保持一致即可。

    创建自定义的Run/Debug configuration。点击Run菜单栏,Edit Configurations, 点击+,选择Custom Build Application,配置如下:

    # Executable 和 Program arguments 可以根据需要调试的信息自行选择
    # NameL:Configure 的名称
    Name: linux-x86_64-normal-server-slowdebug
    # Target:选择上一步创建的 “Custom Build Target”
    Target: linux-x86_64-normal-server-slowdebug
    # Executable:程序执行入口,也就是需要调试的程序
    Executable: 这里我们调试`java`,选择`{source_root}/build/{build_name}/jdk/bin/java`。
    # Program arguments: 与 “Executable” 配合使用,指定其参数
    Program arguments: 这里我们选择`-version`,简单打印一下`java`版本。
    

    如果不想每次运行/调试前都执行Build操作(在这里就是Make构建过程,比较耗时),可以在编辑页下方Before launch框中删除Build条目。

    点击Run/Debug开始运行/调试。

  • 如果使用的调试器是gdbUbuntu下默认),调试的时候可能会发现gdb报错:Signal: SIGSEGV (Segmentation fault)。解决办法是,创建用户家目录创建.gdbinit,内容如下:
    handle SIGSEGV pass noprint nostop
    handle SIGBUS pass noprint nostop
    
  • 如果使用的调试器是lldbMacOS下默认),调试的时候可能会发现lldb报错:SIGSEGV (signal SIGSEGV)。解决办法是,在用户家目录创建.lldbinit,内容如下:
    break set -n main -C "process handle --pass true --stop false SIGSEGV" -C "process handle --pass true --stop false SIGBUS"
    

    配合File Watchers插件自动更新Compilation Database(可选)

    如果修改了项目代码,需要重新生成Compilation Database,一般情况需要重新构建才可以。

    如果不想每次都重新手动构建,可以使用Files Watcher插件来实现监听变更自动重新生成。详见:https://www.jetbrains.com/help/clion/managing-makefile-projects.html#filewatcher-plugin

    Ubuntu 16.04 环境

    OpenJDK 8

    1. 下载OpenJDK8源代码

    我们这里选择从AdoptOpenJDKGitHub仓库下载源代码。

    # 首先需要安装git工具(如果没有的话)
    sudo apt-get install git
    # 克隆项目代码,可能耗时较长
    git clone git@github.com:AdoptOpenJDK/openjdk-jdk8u.git
    

    2. 安装工具链及依赖

    # 首先需要下载安装 JDK7 作为 BootJDK
    方法见上文
    # 安装编译器及构建工具
    sudo apt-get install gcc g++ gdb make
    # 下载安装依赖包
    sudo apt-get install libasound2-dev libfreetype6-dev libcups2-dev libfontconfig1-dev libxext-dev libxrender-dev libxtst-dev libxt-dev
    

    3. 配置及构建

    # 首先进入 OpenJDK8 源码目录
    sh ./configure --with-debug-level=slowdebug --disable-zip-debug-info --with-target-bits=64 --with-boot-jdk=/home/jiajiawang/software/jdk/jdk1.7.0_80 --with-freetype-include=/usr/include/freetype2 --with-freetype-lib=/usr/lib/x86_64-linux-gnu/
    

    configure参数说明:

    参数的更多说明及更多参数请参考:OpenJDK 8 Build README - Configure

    我们可以使用两种工具来生成Compilation Database

    使用Bear工具

    # 下载Bear工具
    sudo apt-get install bear
    # 构建,并使用bear工具生成Compilation Database
    bear make all
    

    使用compiledb工具

    # 需要保证有python环境
    # 安装pip
    sudo apt-get install python-pip
    # pip安装 compiledb
    pip install compiledb
    # 构建,并使用compiledb工具生成Compilation Database
    compiledb make all
    

    更多maketarget请参考OpenJDK 8 Build README - Make

    如果没有报错,完成之后应该可以在./build/linux-x86_64-normal-server-slowdebug/jdk目录下找到编译之后的JDK,验证一下是否成功

    ~: cd build/linux-x86_64-normal-server-slowdebug/jdk/bin/
    ~: ./java -version
    openjdk version "1.8.0-internal-debug"
    ......
    

    同时项目根目录下应该同时有一个compile_commands.json文件,并且不为空。

    4. 导入CLion并调试

    步骤参见上文

    OpenJDK 11

    1. 下载OpenJDK11源代码

    # 首先需要安装git工具(如果没有的话)
    sudo apt-get install git
    # 克隆项目代码,可能耗时较长
    git clone git@github.com:AdoptOpenJDK/openjdk-jdk11u.git
    

    2. 安装工具链及依赖

    # 需要下载安装 JDK10 作为 BootJDK
    方法见上文
    # 安装编译器及构建工具
    sudo apt-get install gcc g++ gdb make autoconf
    # 下载安装依赖包
    sudo apt-get install libfreetype6-dev libcups2-dev
    sudo apt-get install libx11-dev libxext-dev libxrender-dev libxrandr-dev libxtst-dev libxt-dev
    sudo apt-get install libasound2-dev libffi-dev
    sudo apt-get install libfontconfig1-dev
    

    3. 配置及构建

    sh ./configure --with-debug-level=slowdebug --with-native-debug-symbols=internal --with-target-bits=64 --with-boot-jdk=/home/jiajiawang/software/jdk/jdk-10.0.2

    如果不成功,一般可能是缺少部分依赖,根据脚本给出的提示安装相应依赖即可。

    configure参数说明:

    --with-native-debug-symbols 指定如何构建debug symbol,可选值有none,internal, external, zipped,设置为internal可以更好地调试 --with-target-bits 选择32位或者64位,根据操作系统选择 --with-boot-jdk bootjdk位置 --with-freetype-include
    --with-freetype-lib 指定freetype依赖位置。如果提示找不到freetype,需要配置这两个参数

    参数的更多说明及更多参数请参考:OpenJDK 11 Build README - Configure

    # 生成Compilation Database
    make compile-commands
    make all
    

    更多maketarget请参考OpenJDK 11 Build README - Make

    完成之后应该可以在./build/linux-x86_64-normal-server-slowdebug/jdk目录下找到编译之后的jdk,验证一下是否成功

    ~: cd build/linux-x86_64-normal-server-slowdebug/jdk/bin/
    ~: ./java -version
    openjdk version "11.0.8-internal" 2020-07-14
    ......
    

    同时在/build/linux-x86_64-normal-server-slowdebug/目录下会有compile_commands.json文件,并且不为空。

    4. 导入CLion并调试

    大致步骤与前文介绍相同。
    需要注意的是在选择/build/linux-x86_64-normal-server-slowdebug/目录下的compile_commands.json文件导入项目之后需要更改项目的根目录为源码的根目录(这里也就是openjdk-11u目录)。点击菜单Tools | Compilation Database | Change Project Root,选择源码根目录openjdk-11u),等待重新索引完成。

    MacOS 10.15 环境

    OpenJDK 8

    MacOS 10.15.5环境下构建OpenJDKLinux下步骤相似,但是由于OpenJDK 8版本较老,其中一些依赖在MacOS 10.15.5版本中已经无法找到,导致在配置构建过程中会出现各种问题,本文给出了一种比较简单方便的办法。

    1. 下载OpenJDK8源代码

    我们选择从AdoptOpenJDKgithub仓库下载源代码

    git clone git@github.com:AdoptOpenJDK/openjdk-jdk8u.git
    

    2. 安装工具链及依赖

  • 首先需要下载安装jdk7作为bootjdk,方法见文章开头。
  • 安装HomeBrewHomebrew是一款MacOS系统上的软件包管理系统。
    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
    
  • 安装Xcode。可以直接在App Store搜索安装,也可以在https://developer.apple.com/download/more/下载离线安装包安装。可以使用xcodebuild命令验证是否安装成功,正确输出版本号则表明正确安装。
    xcodebuild -version
    如果是离线安装的话,可能会报xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance错误,这是因为xcodebuild找不到新安装的Xcode,只需要执行下面这个命令即可。
    sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer/
    
  • 安装编译工具
    # 安装构建工具
    brew install make
    
  • 安装所需依赖
    # 安装freetype
    brew install freetype
    

    3. 配置及构建

    3.1 修改代码

    如果不对代码进行修改,在执行configure的时候,会报各种错误。网上也有很多针对每种错误来修改源文件来解决报错的方法, 这里给出一种更为方便的方法。
    GitHub上的stooke/jdk8u-xcode10这个项目,提供了对openjdk8的代码进行修改的patch文件,对代码修改之后,就可以正常地configure

    git clone git@github.com:stooke/jdk8u-xcode10.git
    

    这个项目本身提供了脚本来完成下载源码、下载依赖、代码修改、配置、编译、测试等工作,但我们这里只使用其中的修改代码这部分。原项目中的README可能已经过时了,通过查看其源代码中的build8.sh文件,能够大概了解其中的执行逻辑,据此我将其中的修改OpenJDK8代码的部分抽取出来,简化如下:

    新建一个shell脚本patch.sh,内容如下:

    #!/bin/bash
    # JDK8 源码所在目录
    JDK_DIR=`pwd`
    # 下载的jdk8u-xcode10项目所在目录
    PATCH_DIR="$(dirname $JDK_DIR)/jdk8u-xcode10"
    PATCH_DIR="$PATCH_DIR/jdk8u-patch"
    applypatch() {
    	cd "$JDK_DIR/$1"
    	echo "applying $1 $2"
    	patch -p1 <$2
    patchjdkbuild() {
    	echo "patch jdk"
    	# JDK-8019470: Changes needed to compile JDK 8 on MacOS with clang compiler
    	applypatch . "$PATCH_DIR/jdk8u-8019470.patch"
    	# JDK-8152545: Use preprocessor instead of compiling a program to generate native nio constants
    	# (fixes genSocketOptionRegistry build error on 10.8)
    	applypatch jdk "$PATCH_DIR/jdk8u-jdk-8152545.patch"
    	# fix WARNINGS_ARE_ERRORS handling
    	applypatch hotspot "$PATCH_DIR/jdk8u-hotspot-8241285.patch"
    	# fix some help messages and Xcode version checks
    	applypatch . "$PATCH_DIR/jdk8u-buildfix1.patch"
    	# use correct C++ standard library
    	#applypatch . "$PATCH_DIR/jdk8u-libcxxfix.patch"
    	# misc clang-specific cleanup
    	applypatch . "$PATCH_DIR/jdk8u-buildfix2.patch"
    	# misc clang-specific cleanup; doesn't apply cleanly on top of 8019470 
    	# (use -g1 for fastdebug builds)
    	#applypatch . "$PATCH_DIR/jdk8u-buildfix2a.patch"
    	# fix for clang crash if base has non-virtual destructor
    	applypatch hotspot "$PATCH_DIR/jdk8u-hotspot-8244878.patch"
    	applypatch hotspot "$PATCH_DIR/jdk8u-hotspot-mac.patch"
    	# libosxapp.dylib fails to build on Mac OS 10.9 with clang
    	applypatch jdk     "$PATCH_DIR/jdk8u-jdk-8043646.patch"
    	applypatch jdk     "$PATCH_DIR/jdk8u-jdk-minversion.patch"
    patchjdkbuild
    

    然后执行这个脚本:

    bash patsh.sh
    

    3.2 配置

    sh ./configure MAKE=/usr/bin/make --with-toolchain-type=clang --with-debug-level=slowdebug --disable-zip-debug-info --with-target-bits=64 --with-boot-jdk=/Users/jiajiawang/Software/jdk/jdk1.7.0_80.jdk/Contents/Home/ --with-freetype-include=/usr/local/Cellar/freetype/2.10.2/include/freetype2 --with-freetype-lib=/usr/local/Cellar/freetype/2.10.2/lib/
    

    MAKE=/usr/bin/make是可选的,如果下文使用Bear来生成Compilation Database,可以不加这个参数。

    configure部分参数说明如下:

    参数的更多说明及更多参数请参考:OpenJDK 8 Build README - Configure

    3.3 构建

    同样我们仍然可以使用bear或者compiledb来生成Compilation Database,但是使用bear过程中遇到一些问题比较繁琐,推荐使用compiledb

    使用compiledb
    # 1. 请先确保安装了Python及pip
    方法请自行搜索
    # 2. 安装compiledb工具
    pip install compiledb
    # 3. 构建,并使用compiledb工具生成Compilation Database
    compiledb make all COMPILER_WARNINGS_FATAL=false
    # 可以使用 LOG=debug 选项来输出更为详细的信息
    # compiledb make all LOG=debug COMPILER_WARNINGS_FATAL=false
    

    使用compiledb可能会存在的问题是生成的compile_commands.json文件中所有项的directory项都是项目的根目录,导致一个头文件无法找到,导入CLion时报错,代码定义及跳转无效。原因是在MacOS平台,编译构建使用的可能是gmake,而compiledbgmake切换路径的操作无法捕捉到,导致路径全部都是根目录。解决办法就是显示指定使用make而不是gmake,指定方法就是上一小节中在Configure时指定的MAKE=/usr/bin/make参数。

    使用bear

    上面我们使用compiledb工具来生成Compilation Database,同样也可以使用bear工具来生成:

    # 1. 首先需要关闭SIP,否则生成的 Compilation Database 可能会是空的
    关闭SIP的方法请自行搜索
    # 2. 安装bear
    brew install bear
    # 3. 构建,并使用bear工具生成Compilation Database
    bear make all COMPILER_WARNINGS_FATAL=false
    # 可以使用 LOG=debug 选项来输出更为详细的信息
    # compiledb make all LOG=debug COMPILER_WARNINGS_FATAL=false
    

    如果遇到执行命令遇到报如下错误:

    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/stdio.h:107:15: fatal error: 'stdio.h' file not found"
    

    可以尝试执行如下命令:

    sudo mount -uw /
    sudo cp -R /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include /usr
    

    更多maketarget请参考OpenJDK 8 Build README - Make

    如果没有报错,完成之后应该可以在./build/macosx-x86_64-normal-server-slowdebug/jdk目录下找到编译之后的JDK,验证一下是否成功

    ~: cd build/macosx-x86_64-normal-server-slowdebug/jdk/bin/
    ~: ./java -version
    openjdk version "1.8.0-internal-debug"
    ......
    

    同时项目根目录下应该同时有一个compile_commands.json文件,并且不为空。

    4. 导入CLion并调试

    需要注意在创建Custom Build Targets时,新建的用于BuildExternal Toolmake的参数中也要加上COMPILER_WARNINGS_FATAL=false

    OpenJDK 11

    1. 下载OpenJDK11源代码

    git clone git@github.com:AdoptOpenJDK/openjdk-jdk11u.git
    

    2. 安装工具链及依赖

    首先需要下载安装jdk10作为bootjdk,方法见文章开头。

    安装HomeBrewHomebrew是一款MacOS系统上的软件包管理系统。

    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
    

    安装Xcode。可以直接在App Store搜索Xcode安装,也可以在https://developer.apple.com/download/more/下载离线安装包安装。可以使用xcodebuild命令验证是否安装成功,正确输出版本号则表明正确安装。

    xcodebuild -version
    

    如果是离线安装的话,可能会报xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance错误,这是因为xcodebuild找不到新安装的Xcode,只需要执行下面这个命令即可。

    sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer/
    

    安装编译工具

    brew install autoconf
    brew install make
    

    安装所需依赖

    # 安装freetype
    brew install freetype
    

    3. 配置及编译

    sh ./configure --with-debug-level=slowdebug --with-native-debug-symbols=internal --with-target-bits=64 --with-boot-jdk=/Users/jiajiawang/Software/jdk/jdk-10.0.2+13/Contents/Home

    configure参数说明:

    --with-native-debug-symbols 指定如何构建debug symbol,可选值有none,internal, external, zipped,设置为internal可以更好地调试 --with-target-bits 选择32位或者64位,根据操作系统选择 --with-boot-jdk bootjdk位置 --with-freetype-include
    --with-freetype-lib 指定freetype依赖位置,在执行configure时如果找不到freetype,需要指定这两个参数

    参数的更多说明及更多参数请参考:OpenJDK 11 Build README - Configure

    # 生成Compilation Database
    make compile-commands
    make all
    

    完成之后,应该在/build/linux-x86_64-normal-server-slowdebug/目录下会有compile_commands.json文件。

    更多maketarget请参考OpenJDK 11 Build README - Make

    完成之后应该可以在./build/macosx-x86_64-normal-server-slowdebug/jdk目录下找到编译之后的jdk,验证一下是否成功

    ~: cd build/macosx-x86_64-normal-server-slowdebug/jdk/bin/
    ~: ./java -version
    openjdk version "11.0.8-internal" 2020-07-14
    ......
    

    同时在./build/macosx-x86_64-normal-server-slowdebug/目录下会有compile_commands.json文件,并且不为空。

    4. 导入CLion并调试

    大致步骤与前文介绍相同。
    需要注意的是在选择/build/macosx-x86_64-normal-server-slowdebug/目录下的compile_commands.json文件导入项目之后需要更改项目的根目录为源码的根目录(这里也就是openjdk-11u目录)。点击菜单Tools | Compilation Database | Change Project Root,将项目的根目录设置为源码根目录(openjdk-11u),等待重新索引完成。

  • OpenJDK
  • OpenJDK 8 Build README
  • OpenJDK 11 Build README
  • rizsotto/Bear: Bear is a tool that generates a compilation database for clang tooling
  • nickdiego/compiledb: Tool for generating Clang's JSON Compilation Database files for make-based build systems.
  • Managing Makefile Projects
  • Dealing with Makefile Projects in CLion: Status Update
  • Tips & Tricks: Develop OpenJDK in CLion with Pleasure
  • Debugging OpenJDK - DZone DevOps
  • Compilation database — Sarcasm notebook
  • More Software Downloads - Apple Developer
  • stooke/jdk8u-xcode10: How to compile JDK 8u with Xcode 9, 10 or 11 on macOS.
  •