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

标签 java cmake 64-bit 32-bit

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

我观察到,在这种情况下,FindJava 自动选择 32 位版本的 Java,尽管 64 位 Java 也可用。请注意,当我调用 CMake 为 Visual Studio 2017 x64 生成时,FindJava 返回 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 ,这应该按预期工作。

关于java - 如何使用 32 位 Visual Studio 生成器使 CMake 的 FindJava 获得 64 位 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60048562/

相关文章:

java - 仅当按下按键时动画出现,不按下任何按键时图像消失

c 应用程序在 64 位 Windows 中崩溃,但在 32 位 win 服务器中工作正常

windows - x64 调用另一个 dll 中的函数

performance - 64 位和内存带宽

c++ - 如何让CMake在任何地方自动添加MagickWand库链接

linux - 我怎样才能让 CMake 找到我的替代 Boost 安装?

java - 奇怪的 Apache Commons Lang StringUtils.join 结果

java - 使用 iTextPdf 将 HTML 转换为 PDF : java. lang.NoSuchMethodError

java - 合并排序抛出错误

CMake:如何让execute_process 等待子目录完成?