C++工程 如何连接第三方依赖库
本文以opencv为例说明分别在windows平台用VS2019以及linux平台下使用CMake如何连接项目的第三方依赖库
VS2019设置第三方依赖库
1.附加包含目录(这里写的绝对路径,建议相对路径)
注意:本工程的opencv的头文件路径是E:\Project_C++\yolo_dnn\yolo_dnn\lean\opencv4.5.5\include\opencv2,附加包含目录写成
E:\Project_C++\yolo_dnn\yolo_dnn\lean\opencv4.5.5\include,那么包含opencv头文件的时候需要写成#include <opencv2/dnn.hpp>,如果附加包含目录写成E:\Project_C++\yolo_dnn\yolo_dnn\lean\opencv4.5.5\include\opencv2,那么就可以写成#include <dnn.hpp>。所以有人就将以上两种情况都写上,如下所示:
E:\Project_C++\yolo_dnn\yolo_dnn\lean\opencv4.5.5\include
E:\Project_C++\yolo_dnn\yolo_dnn\lean\opencv4.5.5\include\opencv2
2.附加库目录(这里写的绝对路径,建议相对路径)
3.附加依赖项
注意 Debug模式使用的是opencv_world455d.lib,Release模式使用的是opencv_world455.lib,与lib对应的dll文件放入工程目录下,有的dll必须放入.exe文件目录下,不知道为什么,待研究
linux下设置第三方依赖库
使用Ubuntu系统,使用CMakeList.txt构建工程,这里介绍三种方式:1.opencv安装到系统目录下,2.opencv 安装到指定目录下,3.将opencv编译成libopencv_world.so的形式(1和2的方式都是一堆.so文件,3是一个.so文件)
1.opencv安装到系统目录下
cmake_minimum_required(VERSION 2.8)
project(yolo_dnn)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_BUILD_TYPE Release)
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/build)
find_package(OpenCV REQUIRED)
aux_source_directory(src/ DIR_SRCS)
ADD_EXECUTABLE(yolo_dnn ${DIR_SRCS})
target_link_libraries(yolo_dnn ${OpenCV_LIBS})
2.opencv安装到指定目录
cmake_minimum_required(VERSION 2.8)
project(yolo_dnn)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_BUILD_TYPE Release)
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/build)
#我的opencv安装路径是/home/yyh/opencv4.5.5_build,而加入lib/cmake/opencv4/的目的指向OpenCVConfig.cmake文件的所在路径
set(OpenCV_DIR "/home/yyh/opencv4.5.5_build/lib/cmake/opencv4/")
find_package(OpenCV REQUIRED)
aux_source_directory(src/ DIR_SRCS)
ADD_EXECUTABLE(yolo_dnn ${DIR_SRCS})
target_link_libraries(yolo_dnn ${OpenCV_LIBS})
3.将opencv编译成libopencv_world.so的形式,cmake直接指向路径,如同windows
cmake_minimum_required(VERSION 2.8)
project(yolo_dnn)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_BUILD_TYPE Release)
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/build)
include_directories(${PROJECT_SOURCE_DIR}/lean/opencv4.5.5/include/opencv4) # 指向.h文件,同windows中的附加包含目录
link_directories(${PROJECT_SOURCE_DIR}/lean/opencv4.5.5/lib) #指向.so的文件路径,同windows中的附加库目录
# 这个和target_link_libraries(yolo_dnn libopencv_world.so)一样可行(有人说这个是连接静态库用的,还是不特别明白两者的区别),这个必须在ADD_EXECUTABLE上面,target_link_libraries必须在ADD_EXECUTABLE下面
# link_libraries(libopencv_world.so)
aux_source_directory(src/ DIR_SRCS)
ADD_EXECUTABLE(yolo_dnn ${DIR_SRCS})
target_link_libraries(yolo_dnn libopencv_world.so) #指定使用.so文件的名称 同windows中的附加依赖项