如何使用Conan包中的二进制文件?以Emscripten环境为例
使用Conan管理的Emscripten构建项目:更简洁的二进制调用方案
你当前通过Conan将Emscripten(emsdk/3.1.23)作为构建依赖完成了基础安装,但调用其二进制文件时遇到了麻烦——imports无法导入emsdk的文件,目前用conan info + awk的脚本临时解决,但可以用更简洁的方式实现。
推荐方案1:使用virtualrunenv生成器自动配置环境
这是最便捷的方式,Conan的virtualrunenv生成器会自动收集所有依赖(包括构建依赖)的环境变量配置,直接帮你完成路径和工具链的设置:
- 修改你的conanfile.txt,添加
virtualrunenv生成器:
[requires] libxml2/2.10.3 zlib/1.2.13 zstd/1.5.2 [generators] cmake virtualrunenv
- 执行Conan安装命令:
conan install . -pr:h emscripten -pr:b default
- 激活环境脚本:
安装完成后会生成对应平台的环境脚本,执行后即可直接调用Emscripten工具链:
# Linux/macOS source conanrun.sh # Windows(PowerShell) .\conanrun.ps1
激活后,emcc、em++等命令可以直接使用,nodejs的路径也会自动加入PATH,无需手动设置。
如果不想手动激活脚本,也可以用conan run直接在配置好的环境中执行构建命令:
conan run . -pr:h emscripten -pr:b default -- emcc your_source.c -o output.wasm
方案2:在Profile中直接配置环境变量
如果不想使用生成器,也可以在host profile的[env]段直接添加路径配置,简化你之前的脚本逻辑:
[settings] os=Emscripten arch=wasm compiler=clang compiler.version=16 build_type=Release [build_requires] emsdk/3.1.23 [options] libxml2:ftp=False libxml2:shared=False libxml2:threads=False [env] # 自动添加emsdk和nodejs的二进制路径 PATH+=($(conan info . --package-filter emsdk/3.1.23 --paths --only "package_folder" -pr:h emscripten -pr:b default | awk ' $2 != "" {print $2}')/bin) PATH+=($(conan info . --package-filter nodejs/16.3.0 --paths --only "package_folder" -pr:h emscripten -pr:b default | awk ' $2 != "" {print $2}')/bin)
执行conan install后,后续的终端会话就能直接调用相关工具了。
为什么imports没生效?
Conan的imports默认仅处理[requires]中的业务依赖,[build_requires]的构建依赖不会被自动导入。如果一定要用imports,需要在conanfile中添加imports:build_requires=True,但这种方式会把emsdk的二进制复制到本地目录,不如直接复用Conan安装的原生路径高效,因此更推荐virtualrunenv方案。
内容的提问来源于stack exchange,提问作者Robert Stewart
相关产品推荐
相关产品推荐

