在哪里为emscripten和CMake放置库

cnu*_*idu 6 c++ cmake emscripten

当我想在"普通"程序中使用库时,我用apt安装它们

apt-get install libjsoncpp-dev
apt-get install libassimp-dev
Run Code Online (Sandbox Code Playgroud)

然后在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})
Run Code Online (Sandbox Code Playgroud)

在使用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
Run Code Online (Sandbox Code Playgroud)

不幸的是它没有用.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的脚本来构建它,但这听起来像是错误的方式.

Ari*_*lka 3

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

在调用 find_library() 之前:

set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER)
Run Code Online (Sandbox Code Playgroud)

后:

set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
Run Code Online (Sandbox Code Playgroud)

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

set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER)
Run Code Online (Sandbox Code Playgroud)

后:

set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
Run Code Online (Sandbox Code Playgroud)