在哪里为emscripten和CMake放置库

时间:2014-03-29 10:26:56

标签: c++ cmake emscripten

当我想在"普通"中使用库时程序我用apt

安装它们
apt-get install libjsoncpp-dev
apt-get install libassimp-dev

然后在CMakeLists.txt中的FIND_LIBRARY

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 个答案:

答案 0 :(得分:1)

这个问题有一个简单的解决方案:

在调用find_library()之前:

set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER)

后:

set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)

同样,在调用find_package()之前:

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)