vscode下find_package(catkin) failed错误一种解决方法

问题:

vscode中,使用cmake进行configure时,发现catkin_init_workspace生成的CMakeLists.txt报错:
find_package(catkin) failed. catkin was neither found in the workspace···

分析:

  • 经过排查分析,发现是CMakeLists.txt中的如下代码出现问题:
# 命令‘catkin_init_workspace’ 生成的‘CMakeLists.txt’
set(catkin_search_path "")
  foreach(path ${CMAKE_PREFIX_PATH})
    if(EXISTS "${path}/.catkin")
      list(FIND catkin_search_path ${path} _index)
      if(_index EQUAL -1)
        list(APPEND catkin_search_path ${path})
      endif()
    endif()
  endforeach()
  • 具体来说是没有从变量${CMAKE_PREFIX_PATH}中的路径搜索到.catkin
    通过直接修改CMakeLists.txt指向的/opt/ros/melodic/share/catkin/cmake/toplevel.cmake打印变量${CMAKE_PREFIX_PATH},发现输出是空的
  • 但是在系统的终端中进行configure可以通过的,执行的命令与vscde中进行configure时的一致,如下:
# 在vscode中利用cmake-tool进行configure时实际实际执行的命令
/usr/bin/cmake \
--no-warn-unused-cli \
-DCMAKE_PREFIX_PATH=/opt/ros/melodic \
-DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE -DCMAKE_BUILD_TYPE:STRING=Release \
-DCMAKE_C_COMPILER:FILEPATH=/usr/bin/x86_64-linux-gnu-gcc-7 \
-DCMAKE_CXX_COMPILER:FILEPATH=/usr/bin/x86_64-linux-gnu-g++-7 \
-S/home/will/allpros/avp_slam_sim \
-B/home/will/allpros/avp_slam_sim/build_vsc \
-G "Unix Makefiles"
  • 另外,即使在~/.bashrc中加入export CMAKE_PREFIX_PATH=/opt/ros/melodic:$CMAKE_PREFIX_PATH,重启电脑后进行configure依然报错,其中的路径/opt/ros/melodic是安装ros时确定的,当然也可以使用命令find / -iname *.catkinlocate *.catkin查找具体路径。

总结:

  • 具体原因暂不明确,疑似是vscode在进行cmake-configure时获取的环境变量${CMAKE_PREFIX_PATH}空的,但是使用系统终端时${CMAKE_PREFIX_PATH}是有值/opt/ros/melodic,该值来自有开机时候的source /opt/ros/melodic/setup.bash,这一步我们在安装ROS的时候已经写入开机时候的自动执行文件~/.bashrc中,且开机后在系统终端中执行echo $CMAKE_PREFIX_PATH 可以正常输出/opt/ros/melodic

解决:

1. 直接修改系统文件

$ sudo gedit /opt/ros/melodic/share/catkin/cmake/toplevel.cmake

在文件/opt/ros/melodic/share/catkin/cmake/toplevel.cmake中加入

list(APPEND CMAKE_PREFIX_PATH "/opt/ros/melodic")

结果如下:

# toplevel CMakeLists.txt for a catkin workspace
# catkin/cmake/toplevel.cmake

cmake_minimum_required(VERSION 3.0.2)

project(Project)

set(CATKIN_TOPLEVEL TRUE)

list(APPEND CMAKE_PREFIX_PATH "/opt/ros/melodic")

# search for catkin within the workspace
set(_cmd "catkin_find_pkg" "catkin" "${CMAKE_SOURCE_DIR}")
execute_process(COMMAND ${_cmd}
  RESULT_VARIABLE _res
  OUTPUT_VARIABLE _out
  ERROR_VARIABLE _err
  OUTPUT_STRIP_TRAILING_WHITESPACE
  ERROR_STRIP_TRAILING_WHITESPACE
)
...
...
...

2. 在vscode的cmake设置中添加属性

Ctrl+Shift+P --> Preferences: Open Settings (JSON)
添加:

"cmake.configureArgs": [
        "-DCMAKE_PREFIX_PATH=/opt/ros/melodic"
    ],

尾巴:

个人遇见问题,仅做记录和参看,欢迎讨论分析。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值