Как заставить компилятор c++ использовать одну из версий установленного пакета, используя CMake?
ROS Fuerte, установленный на моей машине, использует opencv 2.2. Я хотел бы использовать только что установленную версию 2.4.9. Его местоположение /home/polar/soft/lib/opencv/opencv-2.4.9/build/lib
.
как это сделать с CMake, пожалуйста?
Из моих поисков, кажется, что find_library
решил бы проблему, но не смог заставить ее работать.
===== = Я включаю opencv в мои коды cpp, как это
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/opencv.hpp>
#include "opencv2/imgproc/imgproc.hpp"
=========== ВОТ МОЙ CMAKE
cmake_minimum_required(VERSION 2.8)
include($ENV{ROS_ROOT}/core/rosbuild/rosbuild.cmake)
rosbuild_init()
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
rosbuild_genmsg()
rosbuild_gensrv()
# GSL
find_package( PkgConfig REQUIRED)
pkg_check_modules( gsl REQUIRED gsl )
SET(corners_opencv_flag ok)
#*******************************************************************
#*******************************************************************
#****** CORNERS OPENCV
#*******************************************************************
#*******************************************************************
if(corners_opencv_flag)
#---
SET(execFiles_corner_opencv
corner_v1
)
#---
foreach(file_ros ${execFiles_corner_opencv})
rosbuild_add_executable(${file_ros} computer-vision/corners/${file_ros}.cpp )
endforeach(file_ros)
#---
endif(corners_opencv_flag)
#-------------------
# STACK
#--------------------
SET(FILES_TO_RUN
${execFiles_corner_opencv}
)
#=======================================================
#
# CUSTOM LIBRARIES
#
#
#=======================================================
PROJECT(VOLCANO)
SET(SRC ${VOLCANO_SOURCE_DIR}/src)
#******* boost
find_package( Boost REQUIRED COMPONENTS program_options regex )
include_directories( ${Boost_INCLUDE_DIRS} )
if(Boost_FOUND)
message("nn Boost found nn")
endif()
find_package(OpenCV REQUIRED PATHS /home/polar/soft/lib/opencv/opencv-2.4.9/cmake)
#===== Calculus
include_directories(${SRC}/calculus)
include_directories(${SRC}/calculus/matrix)
SET(MY_LIB
${MY_LIB}
Calculus
CholeskyDecompose
)
#-------------------------------------------
# Linking the executables against the
#-------------------------------------------
foreach(file2link ${FILES_TO_RUN})
target_link_libraries(${file2link}
${MY_LIB}
${MY_LIB}
${gsl_LIBRARIES}
${Boost_PROGRAM_OPTIONS_LIBRARY} ${Boost_REGEX_LIBRARY}
${OpenCV_LIB}
)
endforeach(file2link)
#--- sources folders
ADD_SUBDIRECTORY(src)
2 ответов
добавьте это в свои CMakeLists.txt замена предыдущего find_package(OpenCV)
строку:
find_package(OpenCV REQUIRED PATHS /home/polar/soft/lib/opencv/opencv-2.4.9/cmake)
в вашей установке opencv должен быть каталог cmake.
Итак, как я и подозревал, target_link_libraries(${file2link} .... ${OpenCV_LIB})
была проблема: OpenCV_LIB
вроде как выделили.
теперь я связываю opencv таким образом, и он работает:
find_package(OpenCVV 2.4.9 PATHS /home/polar/soft/lib/opencv/opencv-2.4.9/cmake)
...
target_link_libraries(${file2link} .... ${OpenCVV_LIB})
на самом деле я просто использовал другое имя, но OpenCV
.
@texasflood, спасибо за вашу помощь.