栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

vscode下find

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

vscode下find

问题:

在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 *.catkin 或 locate *.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"
    ],
尾巴:

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/937988.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号