在OpenSUSE中集成Drake时出现external/mumps_internal/BUILD.bazel错误
问题概述
在OpenSUSE 15.4环境下构建Drake仿真工具,已安装系统级libmumps5和mumps-devel库,但执行cmake ..和make install时触发Bazel构建错误,提示mumps_internal的glob模式匹配失败,且找不到dmumps_seq目标。
执行的构建步骤
- 进入Drake项目的cmake目录:
cd ~/drake/cmake - 运行CMake配置:
cmake .. - 执行安装:
make install
错误日志
ERROR: Traceback (most recent call last):
File "/home/dan/.cache/bazel/bazel/7ea85213ca47cc67b02970ecea7788b3/external/mumps_internal/BUILD.bazel", line 9, column 16, in
hdrs = glob([
Error in glob: glob pattern 'include/**' didn't match anything, but allow_empty is set to False (the default value of allow_empty can be set with --incompatible_disallow_empty_glob).
ERROR: /home/dan/.cache/bazel/bazel/7ea85213ca47cc67b02970ecea7788b3/external/ipopt_internal_fromsource/BUILD.bazel:347:16: no such target '@mumps_internal//:dmumps_seq': target 'dmumps_seq' not declared in package '' defined by /home/dan/.cache/bazel/bazel/7ea85213ca47cc67b02970ecea7788b3/external/mumps_internal/BUILD.bazel (Tip: usequery "@mumps_internal//:*"to see all the targets in that package) and referenced by '@ipopt_internal_fromsource//:ipopt'
错误复现步骤
- 克隆仓库:
git clone https://github.com/hedaniel7/Drake-OpenSUSE-Integration - 进入仓库目录:
cd Drake-OpenSUSE-Integration - 切换到指定提交:
git checkout f0bc814fd00f07a0a686ccf1509022a4719d484b - 构建Docker镜像:
docker-compose build --no-cache(Surface Book 3、Ubuntu 22.04环境下耗时约560秒) - 运行容器:
docker-compose run drake-opensuse
解决方案
1. 强制使用系统MUMPS库
Drake默认会从源码构建MUMPS依赖,但你已安装系统级库,只需在CMake配置时添加参数跳过源码构建:
cmake .. -DUSE_SYSTEM_MUMPS=ON
该参数会让Drake直接链接到已安装的libmumps5和mumps-devel,避免Bazel尝试构建源码版MUMPS。
2. 手动指定库路径(可选)
如果CMake无法自动识别MUMPS的安装路径,可手动指定头文件和库目录:
cmake .. -DUSE_SYSTEM_MUMPS=ON \ -DMUMPS_INCLUDE_DIR=/usr/include/mumps \ -DMUMPS_LIBRARY_DIR=/usr/lib64
(OpenSUSE 15.4的MUMPS通常安装在上述路径,若实际路径不同需调整)
3. 清理构建缓存
之前的Bazel缓存已包含失败的构建状态,需清理后重新配置:
rm -rf ~/drake/cmake mkdir ~/drake/cmake cd ~/drake/cmake # 执行上述带参数的cmake命令
内容的提问来源于stack exchange,提问作者Daniel He

