emscripten 和 CMake 库的放置位置

     2023-02-17     41

关键词:

【中文标题】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... 查看详情