如何使用 32 位 Visual Studio 生成器使 CMake 的 FindJava 获得 64 位 Java

How to make CMake's FindJava get 64 bit Java with a 32 bit Visual Studio generator

我应用 CMake 生成一个 Visual Studio 2017 解决方案来构建一个 32 位应用程序 Windows 10. 为了创建构建系统,我让 CMake 调用一些 Java生成一些要编译的代码的工具(应用 Eclipse 建模框架)。为了找到 Java 本身,我在 find_package(Java) 调用中应用了 CMake 查找器模块 FindJava

我发现 FindJava 在这种情况下会自动选择 Java 的 32 位版本,尽管 64 位 Java 也可用。请注意,当我调用 CMake 为 Visual Studio 2017 x64FindJava returns 生成 64 位 Java 时。因此,Java 版本似乎取决于所用生成器的位数。

我的问题是,32 位 Java 有时无法分配足够的堆内存来执行代码生成工具。

为了避免这种情况,我想让 FindJava 始终找到独立于 Visual Studio 生成器位数的 64 位 Java。

我该如何实现?

我目前使用 CMake 3.14,但如果有帮助,我会更新。

编辑

我忘了说我实现了供许多开发人员在他们的机器上使用的 CMake 构建系统。因此,我宁愿不假定构建机器上 32 位和 64 位 Java 安装的固定路径。

也许您可以尝试在您的 CMake 中设置环境变量 JAVA_HOME。但是,您需要强制开发人员相应地设置他们的环境。

if(NOT DEFINED ENV{JAVA_HOME_64}) 
    message(FATAL_ERROR "This build requires setting your JAVA_HOME_64 environment variable to your 64 bit version of Java.")
endif()

set(ENV{JAVA_HOME} "$ENV{JAVA_HOME_64}")

在您的CMakeLists中设置环境变量不会影响您项目外的环境变量。根据 FindJava Documentation,这应该按预期工作。

分析 FindJava.cmake 的代码表明,目前无法按要求手动 select Java 位数。

我已经为此提交了更改请求:https://gitlab.kitware.com/cmake/cmake/issues/20306