我应用 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/