2016-08-26 6 views
3

Как связать общий объект с моим собственным кодом в cmake?
Я хотел бы связать OpenCV, я имею в виду libopencv _ ***. So.3.1 или что-то в этом роде на свой собственный программный пакет.Как связать общий объект в cmake?

В этом случае, я считаю, что следующие строки являются ответом на этот вопрос.

... 
find_package(OpenCV 3.1) 
include_directories(${OpenCV_INCLUDE_DIRS}) 
link_directories(${OpenCV_LIBRARY_DIRS}) 
... 
target_link_libraries(my_node ${OpenCV_LIBRARIES}) 

Но, вот эта проблема. Я установил OpenCV 2.4.8 под/usr/include и/usr/lib/x86_64-linux-gnu раньше, и теперь я бы хотел использовать OpenCV 3.1.0, установленный в локальном каталоге "~/Libs/opencv" от кода. Поэтому при компиляции кодов OpenCV 2.4.8 имеет приоритет и используется.

В этом случае, как я должен описывать CMakeLists.txt?
В настоящее время я пишу, как следовать.

... 
set(CMAKE_PREFIX_PATH ${HOME}/Libs/opencv) 
include(${HOME}/Libs/opencv/share/OpenCV/OpenCVConfig.cmake) 
find_package(OpenCV 3.1) 
set(OpenCV_INCLUDE_DIRS ${HOME}/Libs/opencv/include) 
include_directories(${OpenCV_INCLUDE_DIRS) 
set(OpenCV_LIBRARY_DIRS ${HOME}/Libs/opencv/lib) 
link_directories(${OpenCV_LIBRARY_DIRS}) 
... 

Вышеупомянутый тип CMakeLists.txt помог мне.
Если исполняемый файл скопирован в тот же каталог, где libopencv _ ***. So.3.1, работает вышеописанный CMakeLists.txt.
В противном случае «make» терпит неудачу. Но я хотел бы сделать его независимым от каталога, который содержит исполняемый файл.

Как я могу это сделать? Спасибо заранее.

+0

4 upvotes в течение часа ...? – usr1234567

+0

Вы должны настроить порядок библиотек с помощью BEFORE и AFTER. – usr1234567

+0

Посмотрите на это: https://cmake.org/Wiki/CMake_RPATH_handling это может помочь – Amadeus

ответ

1

См. Документ cmake's find_library. Некоторые предопределенные пути используются для поиска libs. (Зависит от платформы). Это можно отключить с помощью опций. Пробег find_package(OpenCV 3.1 PATHS ~/Libs/opencv NO_DEFAULT_PATH NO_SYSTEM_ENVIRONMENT_PATH)

+0

Спасибо за ваш комментарий! На самом деле этого было недостаточно, но я мог решить проблему, как я упоминал выше. – Pythoner

Смежные вопросы