我无法按照下面的说明编译OSL:https://github.com/imageworks/OpenShadingLanguage/blob/master/INSTALL.md
错误抱怨缺少一个环境变量OPENIMAGEIO_LIBRARY_DIRS。我尝试自己构建OpenImageIO或者使用vcpkg。因此,我已经设置了所有其他缺失的vars (例如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)编辑:基于@Tsyvarev答案添加了env变量和文件夹树的图像

发布于 2019-01-19 09:20:45
因此,脚本src/cmake/modules/FindOpenImageIO.cmake以不寻常的方式运行:
如果在第一次运行 cmake时找不到一个库,那么每当环境设置是否正确时,就会使cmake的所有进一步的调用失败。
在第一个失败之后使其成功的唯一方法是删除CMake缓存文件(构建目录中的CMakeCache.txt)。
通常FindXXX.cmake是这样编写的,如果库第一次运行时还没有找到,则可以调整环境设置,并且重新运行 cmake以尝试E 123搜索e 224库e 125再次E 226。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变成空,将不再重写(因为它是缓存的)。变量的空值由“未找到库”的脚本来处理。
发布于 2019-01-18 08:58:52
错误信息
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),但是无法找到库。
如果错误消息告诉nothing有关环境变量设置,则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 环境变量设置为OpenImageIO库的安装路径。正如注释中所指出的,这个安装路径希望包含bin/、lib/和include/子目录。在lib/子目录中,它应该是OpenImageIO库文件(具有适当的前缀和后缀)。
https://stackoverflow.com/questions/54246093
复制相似问题