2014-03-29 9 views
6

Wenn ich ein Bibliothek in "normalen" Programmen verwenden, möchte ich sie mit aptWo platzieren Bibliotheken für Emscripten und CMake

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

Und dann find_library in 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}) 

Wenn installieren Kompilieren mit emscripten Ich muss natürlich die Bibliotheken anders installieren. Ich habe ein Verzeichnis $ HOME/emscripten-prefix erstellt und diese manuell als statische Bibliotheken mit --prefix = $ HOME/emscripten-prefix kompiliert und versucht, CMAKE_INSTALL_PREFIX in diesem Verzeichnis (und ähnlich für CMAKE_PREFIX_PATH) zu suchen:

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

Leider hat es nicht funktioniert. strace enthüllte, dass CMake CMAKE_FIND_ROOT_PATH (welches auf $ EMSCRIPTEN_ROOT_PATH}/cmake in $ EMSCRIPTEN/cmake/Platform/Emscripten.cmake gesetzt ist) allen Pfaden vorgibt. Ich habe versucht, es mit -DCMAKE_FIND_ROOT_PATH zu ändern, aber Emscripten.cmake hat das übersteuert.

Was ist der richtige Weg, dies zu tun? Ich denke, ich kann es bauen, indem ich ein Skript mache, das Emscripten.cmake kopiert und CMAKE_FIND_ROOT_PATH modifiziert, aber das klingt wie der falsche Weg.

Antwort

1

Es gibt eine einfache Lösung für dieses Problem:

Vor find_library() aufrufen:

set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER) 

Nach:

set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) 

Ebenso vor find_package() aufrufen:

set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER) 
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER) 

Nachher: ​​

set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) 
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)