我怎样才能将共享对象链接到我自己的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”失败。 但是我想使它在包含可执行文件的目录上独立。
我该怎么办这个问题? 提前致谢。
查看cmake的find_library
文档。 一些预定义的路径用于搜索库。 (取决于平台)。 可以通过选项禁用此功能。 试试find_package(OpenCV 3.1 PATHS ~/Libs/opencv NO_DEFAULT_PATH NO_SYSTEM_ENVIRONMENT_PATH)