当我想在"普通"中使用库时程序我用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的脚本来构建它,但这听起来像是错误的方式。
答案 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)