Как заставить CMake Find Java получить 64-битный Java с 32-битным генератором Visual Studio - PullRequest
0 голосов
/ 04 февраля 2020

Я применяю CMake для генерации решения Visual Studio 2017 для сборки 32-битного приложения и для Windows 10. Для создания системы сборки я позволил CMake вызвать некоторые Java инструменты для генерации некоторого кода для компиляции. (применяя Eclipse Modeling Framework). Чтобы найти Java, я применяю модуль поиска CMake FindJava в вызове find_package(Java).

Я заметил, что FindJava автоматически выбирает 32-битную версию Java в этом случае хотя 64-битный Java также доступен. Обратите внимание, когда я вызываю CMake для генерации для Visual Studio 2017 x64, FindJava возвращается с 64-битным Java. Итак, версия Java, похоже, зависит от разрядности используемого генератора.

Моя проблема в том, что 32-битный Java иногда не может выделить достаточно памяти для выполнения инструментов генерации кода.

Чтобы избежать этого, я бы хотел, чтобы FindJava всегда находил 64-битный Java, не зависящий от разрядности генератора Visual Studio.

Как этого добиться?

В настоящее время я использую CMake 3.14, но могу обновить, если это поможет.

Редактировать

Я забыл упомянуть, что внедряю систему сборки CMake, которая будет использоваться многими разработчики на своих машинах. Поэтому я предпочел бы не указывать фиксированный путь к 32-разрядной и 64-разрядной Java установкам на компьютерах сборки.

Ответы [ 2 ]

0 голосов
/ 04 февраля 2020

Анализ кода FindJava.cmake показал, что в настоящее время невозможно выбрать Java битность вручную в соответствии с запросом.

Я подал запрос на изменение: https://gitlab.kitware.com/cmake/cmake/issues/20306

0 голосов
/ 04 февраля 2020

Возможно, вы можете попробовать установить переменную окружения JAVA_HOME в вашем CMake. Однако вам необходимо обеспечить, чтобы разработчики настраивали свою среду соответствующим образом.

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 не повлияет на переменную среды вне вашего проекта. Согласно документации Find Java , это должно работать как положено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...