emscripten 和 CMake 库的放置位置
Posted
技术标签:
【中文标题】emscripten 和 CMake 库的放置位置【英文标题】:Where to place libraries for emscripten and CMake 【发布时间】:2014-03-29 10:26:55 【问题描述】:当我想在“普通”程序中使用库时,我会使用 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】:这个问题有一个简单的解决方案:
在调用 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)
【讨论】:
以上是关于emscripten 和 CMake 库的放置位置的主要内容,如果未能解决你的问题,请参考以下文章
如何在 cmake 中使用 emscripten 端口(SDL2 和 Freetype)
如何将 emscripten 与 cmake 一起用于项目依赖项?
如何让 JetBrains CLion 中的“cmake”工作来编译 Emscripten/WebAssembly?
使用 CMake 时如何在 Emscripten 中导出 C 函数