关键词:
【中文标题】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 和 vcpkg 的 CMake 无法绑定两个 TOOLCHAIN_FILES
】带有Emscripten和vcpkg的CMake无法绑定两个TOOLCHAIN_FILES【英文标题】:CMakewithEmscriptenandvcpkgcan\'tbindtwoTOOLCHAIN_FILES【发布时间】:2020-07-2319:57:04【问题描述】:vcpkg和Emscripten都需要将CMAKE_TOOLCHAIN_FILE设置为分别为vcpkg/scripts/buildsystems/v... 查看详情
将外部静态库的段放置到特定位置
】将外部静态库的段放置到特定位置【英文标题】:Placesegmentsofexternalstaticlibrarytospecificlocations【发布时间】:2017-07-0619:47:08【问题描述】:我的应用程序调用了一些放置在外部静态库中的函数。我将外部静态库链接到我的应用... 查看详情
OpenCV Find_Package Emscripten - WebAssembly
】OpenCVFind_PackageEmscripten-WebAssembly【英文标题】:【发布时间】:2018-10-2320:26:19【问题描述】:我尝试将C++程序编译为WebAssembly-它是OpenCVC++库的包装器CMakeLists.txt:cmake_minimum_required(VERSION3.12)project(myProject)set(CMAKE_CXX_STANDARD11)find_pa 查看详情
如何将 emscripten 与 cmake 一起用于项目依赖项?
】如何将emscripten与cmake一起用于项目依赖项?【英文标题】:Howtouseemscriptenwithcmakeforprojectdependencies?【发布时间】:2019-09-1601:56:56【问题描述】:所以我正在尝试将emscripten移植到WebAssembly(wasm)中,该程序在开头包含以下内容:#inc... 查看详情
cmake中设置elf文件加载动态库的位置
1.三个文件1.world.c#include<stdio.h>voidworld(void){printf("world. ");}2.hello.c#include<stdio.h>voidworld(void);voidhello(void){printf("hello ");world();}3.main.cvoidmain(void){hello();}2.编 查看详情
如何让 JetBrains CLion 中的“cmake”工作来编译 Emscripten/WebAssembly?
】如何让JetBrainsCLion中的“cmake”工作来编译Emscripten/WebAssembly?【英文标题】:HowcanIget`cmake`workinJetBrainsCLiontocompileEmscripten/WebAssembly?【发布时间】:2019-09-2412:51:03【问题描述】:我正在尝试正确设置JetBrainsCLion2019.1以从C源代码构... 查看详情
使用 CMake 时如何在 Emscripten 中导出 C 函数
】使用CMake时如何在Emscripten中导出C函数【英文标题】:HowtoexportCfunctioninEmscriptenwhenusingCMake【发布时间】:2020-06-2512:48:02【问题描述】:在thistutorial中显示了以下用于导出C函数的示例./emcctests/hello_function.cpp-ofunction.html-sEXPORTED_FUNC... 查看详情
Emscripten Clang 生成 ELF 64 位可执行文件和 wasm 二进制交叉编译器目标
】EmscriptenClang生成ELF64位可执行文件和wasm二进制交叉编译器目标【英文标题】:EmscriptenClangproduceELF64-bitexecutabelandwasmbinarycrosscompilertargets【发布时间】:2020-02-0415:23:05【问题描述】:我准备了一个最小的Cmake项目,其中包含一个... 查看详情
CMake可以生成配置文件吗?
...需要将配置文件从C++转换为JS,我正在尝试在项目中使用emscripten。Emscripten带有一个名为emconfigure的工具,它取代了autoconf配置,但是我正在构建的项目使用cmake作为构建系统,并且目前(1月12日)emscripten仅支持 查看详情
cmake:共享库和静态库的排序重要吗?
】cmake:共享库和静态库的排序重要吗?【英文标题】:cmake:orderingofsharedandstaticlibrariesimportant?【发布时间】:2016-04-2020:57:51【问题描述】:我正在创建一个二进制文件并链接依赖项。所有二进制文件都将链接到libpthread.so发布模... 查看详情
cmake--模块的使用和自定义模块(代码片段)
...果程序中使用了外部库,事先并不知道它的头文件和链接库的位置,就要给出头文件和链接库的查找方法,并将他们链接到程序中。FIND_PACKAGE(<name>[major.minor][QUIET][NO_MODULE][[REQUIRED|COMPONENTS][componets...]])1)find_package(find_package(模... 查看详情
CMake-构建静态库的困难
】CMake-构建静态库的困难【英文标题】:CMake-Difficultiesbuildingstaticlibrary【发布时间】:2013-09-1100:32:13【问题描述】:所以我这几天一直在尝试构建libarchive,遵循本指南和许多其他线程:https://github.com/libarchive/libarchive/wiki/BuildInstr... 查看详情
如何在包含第三方库的同时使用 emscripten 将 c++ 编译为 javascript?
】如何在包含第三方库的同时使用emscripten将c++编译为javascript?【英文标题】:Howtocompilec++tojavascriptusingemscriptenwhileincludingthirdpartylibraries?【发布时间】:2015-05-1914:56:21【问题描述】:实际上,我在我的c++程序中使用了GSL。我参考... 查看详情
在 CMake 中安装静态库的调试和发布配置
】在CMake中安装静态库的调试和发布配置【英文标题】:InstallbothDebugandReleaseconfigurationsofstaticlibraryinCMake【发布时间】:2020-11-1512:57:04【问题描述】:我切换到catch23.0,它现在表示为静态库并面临其构建类型(配置)的问题。要... 查看详情
带有 cmake 和 glew glfw3 和 glm 库的 Opengl
】带有cmake和glewglfw3和glm库的Opengl【英文标题】:Openglwithcmakeandglewglfw3andglmlibraries【发布时间】:2014-03-1023:55:04【问题描述】:我在Ubuntu12.04LTS上编译thisexample时遇到问题:#include<stdio.h>#include<stdlib.h>#include<GL/glew.h># 查看详情
在 CLion 和 Cmake 中设置外部头文件和链接器库的问题 [重复]
】在CLion和Cmake中设置外部头文件和链接器库的问题[重复]【英文标题】:ProblemssettingexternalheadersandlinkerlibrariesinCLionandCmake[duplicate]【发布时间】:2020-06-2517:20:45【问题描述】:在过去一年左右主要在Linux上使用code::blocks之后,我... 查看详情
链接 Yaml-cpp 和 Armadillo 共享库的 CMake 项目
】链接Yaml-cpp和Armadillo共享库的CMake项目【英文标题】:CMakeprojectlinkingYaml-cppandArmadillosharedlibraries【发布时间】:2017-11-2411:46:39【问题描述】:我正在使用Linux(飞跃42.3)。我想编写一个CMakeList.txt文件,该文件创建包含我的代码... 查看详情
CMake 包含路径 - 依赖于外部库的库
】CMake包含路径-依赖于外部库的库【英文标题】:CMakeIncludepaths-librarythatdependonexternallibrary【发布时间】:2021-10-1215:01:35【问题描述】:以这个项目结构为例projectCMakeLists.txtmain.cpplibAsrc.cppCMakeLists.txtlibBfoo.hfoo.cppCMakeLists.txtsrc.cpp和m... 查看详情