#configuration #cmake #autotools
#конфигурация #cmake #автоинструменты
Вопрос:
С помощью настройки autotool каждая функция может быть явно включена --with-feature=...
/ --enable-feature=...
или явно отключена --without-feature
/ --disable-feature
.
Некоторые сценарии поиска пакетов CMake сначала оценивают переменные feature_ROOT
для поиска там, но это редкость и не рекомендуется. CMake оценивает несколько путей и пытается найти там библиотеки. Чтобы добавить компонент, которого нет в путях по умолчанию, можно добавить правильный путь.
Как можно отключить функцию, которая установлена в системе и, следовательно, обнаруживается настройкой CMake? Например, Java установлена по умолчанию ниже /usr
и найдена CMake без добавления пути к CMake; как я могу отключить Java? Она всегда будет найдена.
Я не хочу вручную изменять CMakeCache.txt .
Подводя итог: у меня есть проект, который я не хочу / не могу изменять, у него есть find_package
, и у меня установлен пакет (например, Java), но я не хочу, чтобы CMake использовал этот пакет. Я хочу, чтобы переключатель / флаг деактивировал установленный и обычно найденный пакет.
Комментарии:
1. Для команды find_package существует множество вложенных опций. Например, если вы установите
NO_DEFAULT_PATH
, то поиск в стандартных расположениях будет отключен.how can I disable Java?
Из документации :The caller may set variable JAVA_HOME to specify a Java installation prefix explicitly.
2.
but it is uncommon and discouraged
Ну, я не могу согласиться с разработчиками здесь) Я не вижу, что плохого, если у вас будет больше возможностей указать местоположение пакета. В этом случае вы можете исправитьFind*.cmake
модули по умолчанию и поместить их в свой репозиторий. Затем добавьте ихCMAKE_MODULE_PATH
и используйте.3. Чтобы уточнить: я хочу отключить функцию с точки зрения пользователя, например, чтобы отключить неработающую установку Java. Изменение исходного кода не является вариантом.
4. Итак, у вас есть проект, который вы не можете изменить, и у которого есть команда
find_package(Java)
(и вы не хотите устанавливать java)? Я думаю, что выхода нет, тогда вам нужно изменить исходный код.5. Создайте свой собственный
FindJava.cmake
файл и добавьте его вCMAKE_MODULE_PATH
. Когда командаfind_package
будет вызвана, она загрузит вашу версию. Как насчет этого? 🙂
Ответ №1:
Как я обнаружил, это совсем не сложно. Чтобы предотвратить обнаружение моей функции, я передаю
-DFEATURE_FOUND=FALSE
в CMake, а затем он не найден, даже при установке.
Или можно передать
-DCMAKE_DISABLE_FIND_PACKAGE_FEATURE=TRUE
чтобы полностью отключить модуль поиска.