我正在尝试在Linux上编译openimageio(oiio),但由于我对cmake
几乎一无所知,所以它很乱。我不想要,我不能直接在/usr/local/
目录中将它们安装在我的计算机上,这就是问题所在。我通过在每个库目录中执行这些bash命令来成功编译依赖项:
export workingdir=<path_to_my_project>
./configure --prefix=$workingdir/sdks/deploy
make install
这样工作正常,我的标题位于include
目录中,我的库位于lib
目录中。
这是我项目的结构:
../<path_to_my_project>
/sdks
/build
/oiio
/png # Successfully compiled
/jpeg # Successfully compiled
/zlib # Successfully compiled
/boost # Successfully compiled
/ilmbase # Successfully compiled
/openexr # Successfully compiled
/deploy
/lib # all .a, .la and .so of successfully compiled libraries
/include # all headers of successfully compiled libraries
问题是oiio库目录中没有./configure
,所以我不知道如何设置前缀路径,当我执行make命令时,我有这样的错误:
CMake Error at /usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:108 (message):
Could NOT find PNG (missing: PNG_LIBRARY) (found version "1.6.21")
Call Stack (most recent call first):
/usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:315 (_FPHSA_FAILURE_MESSAGE)
/usr/share/cmake/Modules/FindPNG.cmake:105 (find_package_handle_standard_args)
src/libOpenImageIO/CMakeLists.txt:120 (find_package)
所以我设置变量并且没有错误但是这不是很干净我不确定我的库是否被正确引用(如果我搞定了变量内容,它仍在工作......)。
set (PNG_PNG_INCLUDE_DIR "<workingdir>/sdks/deploy/include/libpng16")
set (PNG_LIBRARY_DIR "<workingdir>/sdks/deploy/lib")
然后我尝试创建自己的FindXXX.cmake
文件,但有些文件库没有Root变量,所以无论如何我不确定它是否正确找到了所需的文件,而且它会产生错误:< / p>
CMake Error at src/cmake/modules/FindPNG.cmake:104 (include):
include could not find load file:
<workingdir>/sdks/build/oiio/src/cmake/modules/FindPackageHandleStandardArgs.cmake
Call Stack (most recent call first):
src/libOpenImageIO/CMakeLists.txt:120 (find_package)
但它找到了cmake
文件,因为其他错误被正确引用到我的文件中,如果我在cmake
文件中打印出来的话,它会在我运行make
命令时出现
最后要知道,我在oiio目录中运行的命令是make
但是我想要告诉find_library
函数查看其他位置。我可以用其他参数调用该函数,但我不能使用自己的FindXXX.cmake文件。
在oiio存储库的INSTALL文件的第43行中,它表示为自定义库设置环境变量,如PNGDIR
,但应该指向deploys目录还是构建目录?他们说要查看CMake配置输出,可能知道要设置的环境变量,但我不知道他们在说什么文件。
我试过这样设置PNGDIR但它不起作用,如何知道变量名是否应该是PNGDIR?它也可以是PNGROOT?
export PNGDIR=<workingdir>/sdks/deploy # doesn't work
export PNGDIR=<workingdir>/sdks/build/png # doesn't work
如果有人可以帮助我会很好,我需要编译这个库来使用它,希望有人理解我。
答案 0 :(得分:0)
使用CMAKE_PREFIX_PATH
表示find_library
,find_path
等的路径。应该看看(documentation)
不应再使用PNGDIR
之类的内容,并将其视为保留用于向后兼容性的旧版本。 CMake提供的添加XXX_DIR
或XXX_ROOT
的FindXXX补丁被CMake开发者拒绝。