C++ 编译OSL(开放着色语言)时出错,缺少OPENIMAGEIO\u库\u目录
我无法按照此处的说明编译OSL: 该错误表示缺少环境变量OPENIMAGEIO_LIBRARY_DIRS。我尝试自己构建OpenImageIO或使用vcpkg。因此,我设置了所有其他缺少的变量,例如OPENIMAGEIO_库 如果我想设置OPENIMAGEIO_库目录,它应该指向哪里? 还有为什么它说它确实找到了变量,但它也说找到了 适用版本2.1.0,最低要求为1.8.5 以下是我在Mac上构建OSL时遇到的错误:C++ 编译OSL(开放着色语言)时出错,缺少OPENIMAGEIO\u库\u目录,c++,cmake,C++,Cmake,我无法按照此处的说明编译OSL: 该错误表示缺少环境变量OPENIMAGEIO_LIBRARY_DIRS。我尝试自己构建OpenImageIO或使用vcpkg。因此,我设置了所有其他缺少的变量,例如OPENIMAGEIO_库 如果我想设置OPENIMAGEIO_库目录,它应该指向哪里? 还有为什么它说它确实找到了变量,但它也说找到了 适用版本2.1.0,最低要求为1.8.5 以下是我在Mac上构建OSL时遇到的错误: -- Building OSL 1.11.0 -- CMake versio
-- 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 answer添加了我的环境变量和文件夹树的图像
错误消息
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变量
但是,如果打开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库文件。因此,脚本的行为方式不同寻常:
如果它在第一次运行cmake时找不到库,那么无论环境设置是否正确,它都会使所有后续的cmake调用失败
在第一次失败后使其成功的唯一方法是删除build目录中的CMake缓存文件CMakeCache.txt
通常,FindXXX.cmake的编写方式是,如果在第一次运行cmake时未找到库,则可以调整环境设置并重新运行cmake,以便再次尝试搜索库。CMake命令find_library、find_path和类似命令完美地支持这种行为
脚本FindOpenImageIO.cmake使用
对于查找OpenImageIO库,然后将库文件的目录部分提取到另一个变量OpenImageIO_library_DIRS中:
但由于缓存选项,它会缓存此类提取的结果,因此如果第一次未找到库,则变量OPENIMAGEIO_library_DIRS将变为空,并且在缓存时不会再次重写。变量的空值由库未找到的脚本处理。我在问题中添加了.bash_配置文件的屏幕截图和我编译的oiio的树结构。我做错了什么?嗯,假设在.bash\u配置文件中设置了变量OPENIMAGEIO\u ROOT\u DIR,那么您的设置应该可以正常工作。我不知道如何调试find_library调用,该调用实际搜索库,但在您的情况下失败。您可以检查OPENIMAGEIO_INCLUDE_DIR的值,它存储在构建目录中的CMakeCache.txt文件中。此值是否对应于OPENIMAGEIO_ROOT_DIR变量的值?这是我在CMakeCache.txt中的值:OPENIMAGEIO_INCLUDE_DIR:PATH=/Users/simionnacu/Desktop/TestingGrounds/oiio/dist/macosx/INCLUDE It指向INCLUDE DIR,但与OPENIMAGEIO_ROOT_DIRI位于同一目录中修复了它!谢谢你的帮助。基本上,您提到了cmakcache.txt,在浏览了所有行之后,我意识到这是一个缓存,所以我使用了nuke make nuke,然后编译了库。我相信这是新手犯的错误。请在你的回答中添加关于CMakeCache.txt的内容,并制作nuke,我将接受它作为回答。谢谢!好的,删除CMakeCache.txt是一种通用的尝试,在出现任何问题时,例如重置电脑。每当您遇到CMake问题并想请他人帮助时,请尝试删除CMakeCache.txt并再次运行CMake。尽管如此,我还是添加了另一个答案,描述了缓存和脚本的错误。
find_library(OPENIMAGEIO_LIBRARY ...)
get_filename_component (OPENIMAGEIO_LIBRARY_DIRS "${OPENIMAGEIO_LIBRARY}" DIRECTORY CACHE)