如何在cmake中链接共享对象?

时间:2016-08-26 20:25:08

标签: c++ linux opencv cmake

如何在cmake中将共享对象链接到我自己的代码?
我想链接OpenCV,我的意思是libopencv _ ***。so.3.1或类似的东西到我自己的软件包。

在这种情况下,我认为以下几行是这个问题的答案。

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

但是,这就是这个问题。 我之前在/ usr / include和/ usr / lib / x86_64-linux-gnu下安装了OpenCV 2.4.8,现在我想在本地目录“〜/ Libs / opencv”中安装OpenCV 3.1.0码。 因此,在编译代码时,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”失败。 但是我想让它独立于包含可执行文件的目录。

我该怎么做才能解决这个问题? 提前谢谢。

1 个答案:

答案 0 :(得分:1)

请参阅cmake的find_library文档。 一些预定义的路径用于搜索库。 (取决于平台)。可以通过选项禁用此功能。 尝试 find_package(OpenCV 3.1 PATHS ~/Libs/opencv NO_DEFAULT_PATH NO_SYSTEM_ENVIRONMENT_PATH)