2016-04-28 47 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開發人員拒絕。