【ROS2学习】解决删除编译的包后,再重新编译出现的问题

有时需要对工作空间中的内容进行重新编译,而删除掉build、install、log等包时出现了以下问题:

[0.617s] WARNING:colcon.colcon_ros.prefix_path.ament:The path '/home/xiaowang/ws01_plumbing/install/cpp01_topic' in the environment variable AMENT_PREFIX_PATH doesn't exist
[0.617s] WARNING:colcon.colcon_ros.prefix_path.ament:The path '/home/xiaowang/ws01_plumbing/install/base_interfaces_demo' in the environment variable AMENT_PREFIX_PATH doesn't exist
[0.617s] WARNING:colcon.colcon_ros.prefix_path.catkin:The path '/home/xiaowang/ws01_plumbing/install/cpp01_topic' in the environment variable CMAKE_PREFIX_PATH doesn't exist
[0.617s] WARNING:colcon.colcon_ros.prefix_path.catkin:The path '/home/xiaowang/ws01_plumbing/install/base_interfaces_demo' in the environment variable CMAKE_PREFIX_PATH doesn't exist

出现这些警告的原因是,虽然删除掉了build、install、log文件夹后,环境变量仍然包含指向之前构建的包的路径,显然此时的路径已失效。

解决办法1(繁琐):

可以使用以下命令清理环境变量中的无效路径:

删除AMENT_PREFIX_PATH环境中的无效路径:

export AMENT_PREFIX_PATH=$(echo $AMENT_PREFIX_PATH | sed -e 's;/home/xiaowang/ws01_plumbing/install/cpp01_topic;;')
export AMENT_PREFIX_PATH=$(echo $AMENT_PREFIX_PATH | sed -e 's;/home/xiaowang/ws01_plumbing/install/base_interfaces_demo;;')

 删除相同环境变量中多个路径时,可以利用以下写法:

export AMENT_PREFIX_PATH=$(echo $AMENT_PREFIX_PATH | sed -e 's;/home/xiaowang/ws01_plumbing/install/cpp01_topic;;' -e 's;/home/xiaowang/ws01_plumbing/install/base_interfaces_demo;;')

 删除CMAKE_PREFIX_PATH环境中的无效路径:

export CMAKE_PREFIX_PATH=$(echo $CMAKE_PREFIX_PATH | sed -e 's;/home/xiaowang/ws01_plumbing/install/cpp01_topic;;')
export CMAKE_PREFIX_PATH=$(echo $CMAKE_PREFIX_PATH | sed -e 's;/home/xiaowang/ws01_plumbing/install/base_interfaces_demo;;')

说明(GPT解释):

1.export 命令用于设置环境变量的值,使其对当前 Shell 会话中的所有子进程可用。

2.$(...) 是命令替换语法,它会先执行括号中的命令,然后将其输出结果作为值赋给 CMAKE_PREFIX_PATH 环境变量

3.整个命令将 sed 处理后的结果(即移除了无效路径的 CMAKE_PREFIX_PATH 值)重新赋值给 CMAKE_PREFIX_PATH 环境变量。

         "|"(管道操作符),它将 echo 命令的输出传递给 sed 命令作为输入。

        sed 是一个流编辑器,用于对文本进行替换、插入、删除等操作

   -e 's;/home/xiaowang/ws01_plumbing/install/cpp01_topic;;'sed 的命令选项,表示执行替换操作:

    s sed 的替换命(substitute)。

     /home/xiaowang/..../cpp01_topic 是要查找的字符串(要删除的  路径)。

              空字符串 '' 是替换后的字符串(将找到的路径替换为空)。

              换句话说,这部分命令的作用是将 CMAKE_PREFIX_PATH 中的 /home/../cpp01_topic 路径替换为空字符串,从而有效地删除它。

解决办法2(省事):

删除掉build、install、log文件夹后,重新打开一个终端,直接进行编译,不会出现上述警告。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值