kinetic opencv cmake.conf 文件的bug修复

来源:互联网 发布:天津滨海网络广播电视 编辑:程序博客网 时间:2024/06/15 06:34

原链接:http://community.bwbot.org/topic/153

在 kinetic 版本的 ros 中,系统自带了OpenCV 3.1。但是如果直接通过cmake文件引用的话可能会出现错误。

Imported target "opencv_xphoto" includes non-existent path"/usr/include/opencv-3.1.0-dev/opencv"in its INTERFACE_INCLUDE_DIRECTORIES. Possible reasons include:The path was deleted, renamed, or moved to another location.An install or uninstall procedure did not complete successfully.The installation package was faulty and references files it does notprovide.CMake Error in m-explore/map_merge/CMakeLists.txt:Imported target "opencv_xphoto" includes non-existent path"/usr/include/opencv-3.1.0-dev/opencv"in its INTERFACE_INCLUDE_DIRECTORIES. Possible reasons include:The path was deleted, renamed, or moved to another location.An install or uninstall procedure did not complete successfully.The installation package was faulty and references files it does notprovide.

不止我一个人遇到这个错误。可以看这里, 但是这个是在jade版本的OpenCV 3里面。

最后找到了原因在OpenCV的conf.cmake文件里面的一个配置。在/opt/ros/kinetic/share/OpenCV-3.1.0-dev/OpenCVConfig.cmake里面的第144行和116行

# Extract the directory where *this* file has been installed (determined at cmake run-time)if(CMAKE_VERSION VERSION_LESS "2.8.12")  get_filename_component(OpenCV_CONFIG_PATH "${CMAKE_CURRENT_LIST_FILE}" PATH CACHE)else()  get_filename_component(OpenCV_CONFIG_PATH "${CMAKE_CURRENT_LIST_FILE}" DIRECTORY CACHE)endif()

把其中的CACHE去掉,改成下面的样子

# Extract the directory where *this* file has been installed (determined at cmake run-time)if(CMAKE_VERSION VERSION_LESS "2.8.12")  get_filename_component(OpenCV_CONFIG_PATH "${CMAKE_CURRENT_LIST_FILE}" PATH)else()  get_filename_component(OpenCV_CONFIG_PATH "${CMAKE_CURRENT_LIST_FILE}" DIRECTORY)endif()

如果加CACHE,OpenCV的路径就会定位到/usr/。不加CACHE就会正确定位。不知道是为什么。原则上说CACHE只是把路径加到缓存里面,可以提高效率,应该不会出这个问题。难道是由于系统装了其他版本的OpenCV所以CACHE出了问题?经过我搜索发现并不是所有的人都遇到这个问题,看来还是和本地的环境配置有关系。

反正如上的方法是可以解决问题 :-D

原创粉丝点击