CMake构建C++应用时找不到ZeroMQTargets.cmake求解决办法
解决CMake找不到ZeroMQTargets.cmake的问题
看起来你遇到的是CMake依赖查找时的路径冲突或者ZeroMQ安装不完整的问题,我给你几个实用的解决思路:
1. 检查并修复conda安装的ZeroMQ
首先确认你的conda版ZeroMQ是否真的包含了缺失的ZeroMQTargets.cmake文件,运行以下命令查看:
ls /home/prabhat/miniconda3/share/cmake/ZeroMQ/
如果输出里没有ZeroMQTargets.cmake,说明这个conda包有问题。你可以先卸载再通过conda-forge源重新安装(conda-forge的包通常更完整):
conda remove --force zeromq conda install zeromq -c conda-forge
2. 强制CMake使用系统安装的ZeroMQ
从报错栈可以看到,你的系统里已经有ignition和gazebo相关的库,大概率系统本身也安装了ZeroMQ。问题出在CMake优先找到了conda版本的不完整配置。你可以在运行CMake时手动指定系统ZeroMQ的配置路径:
cmake .. -DCMAKE_PREFIX_PATH=/usr/lib/x86_64-linux-gnu/cmake/ZeroMQ
或者临时修改环境变量,让系统的CMake配置路径优先级更高:
export CMAKE_PREFIX_PATH=/usr/lib/x86_64-linux-gnu/cmake:$CMAKE_PREFIX_PATH cmake ..
3. 避免系统库与conda库混合冲突
如果你的项目是基于conda环境开发的,建议创建一个干净的conda环境,把gazebo、zeromq等所有依赖都通过conda安装,避免系统库和conda库的混合调用:
conda create -n gazebo_build_env python=3.8 conda activate gazebo_build_env conda install gazebo zeromq ignition-transport -c conda-forge
之后在这个环境里重新运行CMake构建项目。
问题根源解释
报错里的ZeroMQConfig.cmake第44行逻辑是:如果当前CMake上下文里没有libzmq或libzmq-static目标,就加载同目录下的ZeroMQTargets.cmake来导入目标。这个文件缺失要么是conda的ZeroMQ包安装不完整,要么是CMake错误地优先选择了conda版本的配置(而系统版本的配置是完整的)。
内容的提问来源于stack exchange,提问作者prabhat telidevara
相关产品推荐
相关产品推荐

