背景:
不安装ros的情况下,使用catkin进行项目工程管理。
一种方法是 直接将catkin package放到项目工程中,这样每个工程都要复制一个,太麻烦。
另一种方法是,安装catkin及其依赖项。但可能是ros未安装的原因,cmake .. 时总是找不到catkin,以下是解决方法。
问题描述:
源码make install安装完catkin之后,在工程文件中输入指令:
mkdir build
cd build
cmake ..
报错如下:
解决流程
这个报错来自于最外层CmakeList.txt中最后一段代码:
# list of catkin workspaces
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()
# search for catkin in all workspaces
set(CATKIN_TOPLEVEL_FIND_PACKAGE TRUE)
find_package(catkin QUIET
NO_POLICY_SCOPE
PATHS ${catkin_search_path}
NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
unset(CATKIN_TOPLEVEL_FIND_PACKAGE)
if(NOT catkin_FOUND)
message(FATAL_ERROR "find_package(catkin) failed. catkin was neither found in the workspace nor in the CMAKE_PREFIX_PATH. One reason may be that no ROS setup.sh was sourced before.")
endif()
endif()
catkin_workspace()
解决方法也在该段中找到提示:
foreach(path ${CMAKE_PREFIX_PATH})
if(EXISTS "${path}/.catkin")
直接原因就是: CMAKE_PREFIX_PATH中未找到 .catkin
因此,我们只需将 .catkin 的路径添加到CMAKE_PREFIX_PATH中即可。
运行如下指令,查询 .catkin 的位置
locate .catkin
找到如下:
/home/yuan/.local/share/Trash/files/build/devel/.catkin
/usr/local/.catkin
cmake .. 之前先运行如下指令即可解决:
export CMAKE_PREFIX_PATH=/home/yuan/.local/share/Trash/files/build/devel:$CMAKE_PREFIX_PATH
或
export CMAKE_PREFIX_PATH=/usr/local:$CMAKE_PREFIX_PATH
进一步的,可以将以上指令复制到 ./.bashrc 中,打开terminal时自动执行。