背景说明
时刻两年,再次配置PX4环境,又踩了一遍坑,过程中遇到报错真的是欲哭无泪,但是解决完回头再来看其实问题并不复杂。
本篇文章面向在PX4-Autopilot目录执行命令
make px4_sitl gazebo
检测环境是否配置成功时出现的子模块缺失的问题,是这次配置环境时的血泪教训。
报错表现形式
这类问题在配置PX4环境过程中极为常见,但报错形式多种多样,以下是几种例子:
ninja: error: '../../src/modules/mavlink/mavlink/pymavlink/tools/mavgen.py', needed by 'mavlink/development/development.h', missing and no known rule to make it
Cannot find source file: devices/src/gps_helper.cpp
FAILED: src/modules/microdds_client/src/libmicroxrceddsclient_project-stamp/libmicroxrceddsclient_project-configure
…CMake Error: The source directory "/home/.../PX4-Autopilot/src/modules/microdds_client/Micro-XRCE-DDS-Client" does not appear to contain CMakeLists.txt.``````这个报错在国内外很多问答上都提到过,但是并未给出好的解决该问题的方法。
这类问题在我们执行
git submodule update --init --recursive
之后无返回信息,且在PX4-Autopilot目录下执行完
sudo apt-get update
sudo apt-get upgrade
也没有需要更新的包之后仍然可能出现。
究其原因仍旧是因为子模块没有下载完整。
通用解决方法
我们可以去到对应模块目录下(例如文件夹/home/你自己的用户名/PX4-Autopilot/src/modules/microdds_client/Micro-XRCE-DDS-Client,对应上面第三种报错),发现里面只有一个文件。这个文件夹的存在让github以为我们下载好了,但实际上并没有下载好,于是我们需要手动重新clone该子模块。
PX4需要的子模块及其链接能在
/home/你自己的用户名/PX4-Autopilot/.gitmodules
文件里找到。
以该子模块为例,我们能在文件中找到以下内容
[submodule "src/modules/microdds_client/Micro-XRCE-DDS-Client"]
path = src/modules/microdds_client/Micro-XRCE-DDS-Client
url = https://github.com/PX4/Micro-XRCE-DDS-Client.git
branch = px4
于是我们可以进入到目录
/home/你自己的用户名/PX4-Autopilot/src/modules/microdds_client
将文件夹
Micro-XRCE-DDS-Client
删除,并在当前目录下开启终端,执行命令:
git clone https://github.com/PX4/Micro-XRCE-DDS-Client.git
然后回到PX4-Autopilot目录下再次尝试编译。
类似的在子模块的子模块也可能出现未成功下载的情况,同理找到对应文件夹下的.gitmodules文件里的子模块链接手动下载即可。
结语
希望这篇文章能帮助你们解决因奇奇怪怪的网络问题导致的子模块下载不完整的问题!
版权归原作者 理想主义者的胜利 所有, 如有侵权,请联系我们删除。