2014-03-29 42 views
6

庫時,我想在「正常」的程序使用的庫我安裝他們傾向於放在何處emscripten和CMake的

apt-get install libjsoncpp-dev 
apt-get install libassimp-dev 

然後FIND_LIBRARY中的CMakeLists.txt

FIND_LIBRARY(JSONCPP_LIBRARY NAMES jsoncpp) 
TARGET_LINK_LIBRARIES(hello ${JSONCPP_LIBRARY}) 

FIND_LIBRARY(ASSIMP_LIBRARY NAMES assimp) 
TARGET_LINK_LIBRARIES(hello ${ASSIMP_LIBRARY}) 

當用emscripten編譯我顯然必須以另一種方式安裝這些庫。我創建了一個目錄$ HOME/emscripten-prefix並將它們手動編譯爲具有--prefix = $ HOME/emscripten-prefix的靜態庫,並試圖以CMAKE_INSTALL_PREFIX的形式查找該目錄(對於CMAKE_PREFIX_PATH也類似):

cmake \ 
    -DCMAKE_TOOLCHAIN_FILE=$EMSCRIPTEN/cmake/Platform/Emscripten.cmake \ 
    -DCMAKE_BUILD_TYPE=Debug \ 
    -G "Unix Makefiles" \ 
    -DCMAKE_INSTALL_PREFIX=$HOME/emscripten-prefix 

不幸的是它沒有工作。 strace透露CMake會在所有路徑中預先加入 CMAKE_FIND_ROOT_PATH(在$ EMSCRIPTEN/cmake/Platform/Emscripten.cmake中設置爲「$ {EMSCRIPTEN_ROOT_PATH}/cmake」)。我試着用-DCMAKE_FIND_ROOT_PATH改變它,但Emscripten.cmake取代了它。

這樣做的正確方法是什麼?我想我可以通過製作一個複製Emscripten.cmake並修改CMAKE_FIND_ROOT_PATH的腳本來構建它,但這聽起來像是錯誤的方式。

回答

1

有一個簡單的解決了這個問題:

set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER) 

後:

set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) 

同樣,調用find_package()之前:

調用find_library()之前

set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER) 
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER) 

後:

set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) 
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)