第三方库的使用方式
任何一个第三方库的使用
- a) 手动在visual studio (或者其它IDE 里面)指定头文件与库文件 (最直接 但繁琐)
- b) 在CMakeLists.txt中指定头文件与库文件 (也比较繁琐)
- c) 在CMakeLists.txt中使用find_package
在linux下 一般直接使用c)方式,apt-get安装后常用软件包(如 opencv)后可以直接使用find_package找到, 因为默认安装到/usr/include /usr/lib/ /usr/local/include/ /usr/local/lib, 所以可以在被cmake搜索到。
而windows下,采用a)方式极为繁琐(虽然可以使用vs的属性表), b)方式与配置属性表几乎一样 c)方式应该是最佳方案(后面会详细讲解如果实现)
使用CMake生成OpenCV的工程
首先必须要编译opencv,一般使用cmake+vs。
进入OpenCV的源代码目录
执行下面指令, 生成项目文件
# 外部编译路径
mkdir build
# 指定安装路径为“H:\cpp\opencv\opencv”,编译好之后会安装到该目录
cmake .. -DCMAKE_INSTALL_PREFIX=H:\cpp\opencv\opencv -G "Visual Studio 12 2013"
# 生成64bit
cmake .. -DCMAKE_INSTALL_PREFIX=H:\cpp\opencv\opencv -G "Visual Studio 12 2013 Win64"
可以把BUILD_opencv_world打开 这样就不会有很多的lib库 而是 集中在world.lib中,不过对vs版本有要求
windows下 编译动态库会产生 bin/dll 和lib/.lib 其中.lib只是生成是给调用者的接口,运行时仍需要.dll (一般加入环境变量中)。 编译静态库则只有 staticlib/.lib 文件较大。 而linux下静态库就是.a 动态库是.so
使用Visual Studio2013编译安装OpenCV
这一步也可以直接用命令行进行,不过这样更直观
进入上面的build
的目录,找到OpenCV.sln
,打开,接下来分别编译生成并安装Release
和Debug
使用的库文件:
生成Debug版的Win32库文件并安装
可以直接运行安装,它自动会先编译所有项目(ALL_BUILD)再安装(INSTALL)
生成Release版本的Win32库文件
最终的安装路径中的文件应该为
检查下x86下的库文件,x86/vc14/lib
和x86/vc14/bin
中均有Debug(结尾有d的库文件)和Release的库文件
测试是否可用
新建一个CMake工程
/-testcv
|- src
| |- main.cpp
|
|- CMakeLists.txt
/
main.cpp代码
#include <iostream>
#include <opencv2\opencv.hpp>
int main(int argc, char *argv[]) {
cv::Mat frame;
cv::VideoCapture camera(0);
while(1) {
camera >> frame;
cv::imshow("camera", frame);
cv::waitKey(30);
}
return 0;
}
CMakeLists.txt代码
cmake_minimum_required(VERSION 3.0)
set(PROJECT_NAME testcv)
project(${PROJECT_NAME})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/bin)
file(GLOB_RECURSE HEADERS *.h)
source_group("Header Files" FILES ${HEADERS})
aux_source_directory(src DIR_SRCS)
# 通过设置该变量让cmake可以找到opencv
SET(OpenCV_DIR "H:\\cpp\\opencv\\opencv")
# 把OpenCV安装目录的根目录和bin目录包含到环境变量中也可以让cmake找到。
find_package(OpenCV REQUIRED)
if(OpenCV_FOUND)
include_directories(${OpenCV_INCLUDE_DIRS})
add_executable(${PROJECT_NAME} ${DIR_SRCS} ${HEADERS})
target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS})
endif()
打开命令行,进入test目录:
mkdir build
cd build
cmake ..
进入build目录,打开testcv.sln,查看一下配置中的库文件和头文件都没有问题
Debug
Release
然后设置testcv为启动项,编译运行,可以打开摄像头并看到录像。OK
总结
- 使用CMake来管理需要大量配置库和头文件的项目。
- OpenCV使用官方的exe文件安装后可用,但是自己编译安装后才可以使用CMake来自动管理。
- 如果需要生成x64的库,在第一步的时候,指定生成x64就可以。