2016-04-28 48 views
1

我想在Linux上编译openimageio(oiio),但它是一个混乱,因为我几乎不知道关于cmake。我不想,我不能直接在/usr/local/目录中将它们安装到我的电脑上,这就是问题所在。我在每个库目录执行这些命令的bash编译成功依赖关系:我的图书馆的自定义路径find_library

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 

的问题是,有没有./configure在oiio库目录中,所以我不知道如何设置前缀路径,当我执行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) 

所以我设置变量和它没有任何错误,但是这是不是干净,我不知道我的库正确引用(如果我MES了变量的内容,它仍然在工作......)。

set (PNG_PNG_INCLUDE_DIR "<workingdir>/sdks/deploy/include/libpng16") 
set (PNG_LIBRARY_DIR "<workingdir>/sdks/deploy/lib") 

然后我试图创建自己的FindXXX.cmake文件,但一些不具备的库根变量,反正我不知道这是否正确地找到所需的文件,而且,它使错误:

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,但是它应该指向部署目录还是构建目录?他们说要查看CMake配置输出,也许知道要设置什么环境变量,但我不知道他们在说什么文件。

我试图设置PNGDIR,但它不起作用,如何知道变量名是否应该是PNGDIR?它也可以是PNGROOT?

export PNGDIR=<workingdir>/sdks/deploy # doesn't work 
export PNGDIR=<workingdir>/sdks/build/png # doesn't work 

如果有人能帮助我,我会需要编译这个库来使用它,希望有人能够理解我。

+1

使用'CMAKE_PREFIX_PATH'。像“PNGDIR”这样的东西不应该再使用了。 – usr1234567

+0

它似乎工作,我现在有新的错误,很容易理解,谢谢:) –

回答

0

使用CMAKE_PREFIX_PATH来指示路径,其中find_library,find_path等。应该看看(documentation

PNGDIR这样的东西不应该再被使用,并且被认为是为了向后兼容而保留的遗留物。由CMake提供的用于FindXXX的修补程序添加XXX_DIRXXX_ROOT将被CMake开发人员拒绝。