有时需要对工作空间中的内容进行重新编译,而删除掉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文件夹后,重新打开一个终端,直接进行编译,不会出现上述警告。