Как связать общий объект с моим собственным кодом в 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» терпит неудачу. Но я хотел бы сделать его независимым от каталога, который содержит исполняемый файл.
Как я могу это сделать? Спасибо заранее.
4 upvotes в течение часа ...? – usr1234567
Вы должны настроить порядок библиотек с помощью BEFORE и AFTER. – usr1234567
Посмотрите на это: https://cmake.org/Wiki/CMake_RPATH_handling это может помочь – Amadeus