Ошибка компиляции OSL (Open Shading Language), отсутствует OPENIMAGEIO_LIBRARY_DIRS - PullRequest
0 голосов
/ 18 января 2019

Я не могу скомпилировать OSL, следуя их инструкциям здесь: https://github.com/imageworks/OpenShadingLanguage/blob/master/INSTALL.md

Ошибка сообщает, что отсутствует переменная среды OPENIMAGEIO_LIBRARY_DIRS. Я пытался собрать OpenImageIO самостоятельно или с помощью vcpkg. Поэтому я установил все остальные недостающие переменные (например, OPENIMAGEIO_LIBRARIES) Если я хочу установить этот OPENIMAGEIO_LIBRARY_DIRS, куда он должен указывать? Кроме того, почему он говорит, что нашел переменную, но он также сказал "найдено Подходящая версия "2.1.0", требуется минимум "1.8.5"?

Вот ошибка, которую я получаю при сборке OSL (я на Mac):

-- Building OSL 1.11.0
-- CMake version is 3.13.3
CMake Deprecation Warning at CMakeLists.txt:20 (cmake_policy):
  The OLD behavior for policy CMP0046 will be removed from a future version
  of CMake.

  The cmake-policies(7) manual explains that the OLD behaviors of all
  policies are deprecated and that a policy should be set to OLD only under
  specific short-term circumstances.  Projects should be ported to the NEW
  behavior and not rely on setting a policy to OLD.


-- Project build dir   = /Users/simionnacu/Desktop/TestingGrounds/osl/build/macosx
-- Project install dir = /Users/simionnacu/Desktop/TestingGrounds/osl/dist/macosx
-- platform = macosx
-- CMAKE_CXX_COMPILER is /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++
-- CMAKE_CXX_COMPILER_ID is AppleClang
-- Building for C++11
-- Setting Namespace to: OSL_v1_11
CMake Error at /usr/local/Cellar/cmake/3.13.3/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:137 (message):
  Could NOT find OpenImageIO (missing: OPENIMAGEIO_LIBRARY_DIRS) (found
  suitable version "2.1.0", minimum required is "1.8.5")
Call Stack (most recent call first):
  /usr/local/Cellar/cmake/3.13.3/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:378 (_FPHSA_FAILURE_MESSAGE)
  src/cmake/modules/FindOpenImageIO.cmake:79 (find_package_handle_standard_args)
  src/cmake/externalpackages.cmake:58 (find_package)
  CMakeLists.txt:133 (include)

edit : добавлен образ моей переменной env и дерева папок, основанный на ответе @Tsyvarev enter image description here

Ответы [ 2 ]

0 голосов
/ 19 января 2019

Так что это скрипт src / cmake / modules / FindOpenImageIO.cmake , который ведет себя необычно образом:

Если не удается найти библиотеку при первом запуске cmake, то завершится неудачей все далее вызовы cmake, когда настройки среды становятся правильными или нет.

Единственный способ добиться успеха после первого сбоя - удалить файл кэша CMake (CMakeCache.txt в каталоге сборки).


Обычно FindXXX.cmake записываются так, что если библиотека не была найдена для при первом запуске cmake, можно настроить параметры среды и перезапустите cmake, чтобы попытаться найти в библиотеке снова . Команды CMake find_library, find_path и аналогичные прекрасно поддерживают такое поведение.


Сценарий FindOpenImageIO.cmake использует

find_library(OPENIMAGEIO_LIBRARY ...)

для поиска OpenImageIO библиотеки, а затем извлекает часть каталога файла библиотеки в другую переменную OPENIMAGEIO_LIBRARY_DIRS:

get_filename_component (OPENIMAGEIO_LIBRARY_DIRS "${OPENIMAGEIO_LIBRARY}" DIRECTORY CACHE)

Но кэширует результат такого извлечения (из-за опции CACHE), поэтому, если библиотека не была найдена в первый раз, переменная OPENIMAGEIO_LIBRARY_DIRS становится пустой и никогда не будут переписывать снова (поскольку они кэшируются). Пустота переменной обрабатывается скриптом «библиотека не найдена».

0 голосов
/ 18 января 2019

Сообщение об ошибке

Could NOT find OpenImageIO (missing: OPENIMAGEIO_LIBRARY_DIRS) (found
  suitable version "2.1.0", minimum required is "1.8.5")

означает, что CMake обнаружил OpenImageIO заголовки , обнаружил версию (2.1.0) из них, но не смог найти библиотеки .

Данное сообщение об ошибке говорит ничего о переменных окружения установка, OPENIMAGEIO_LIBRARY_DIRS - это переменная CMake , используемая сценарием.

Но если вы откроете сценарий src / cmake / modules / FindOpenImageIO.cmake , который указан в трассировке вызовов CMake, вы можете найти способ подсказать ему об установке OpenImageIO:

# Special inputs:
#   OPENIMAGEIO_ROOT_DIR - custom "prefix" location of OIIO installation
#                          (expecting bin, lib, include subdirectories)

То есть вы можете установить переменную OPENIMAGEIO_ROOT_DIR environment в путь установки вашей библиотеки OpenImageIO. Как отмечено в комментарии, этот путь установки должен содержать подкаталоги bin/, lib/ и include/. В подкаталоге lib/ это должен быть файл библиотеки OpenImageIO (с соответствующим префиксом и суффиксом).

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