CMake之使用管理工具管理你的依赖库

CMake之使用管理工具管理你的依赖库

所有代码参见我的github,欢迎 BrightXiaoHan/CMakeTutorial 所有代码参见我的github,欢迎

使用包管理工具管理你的依赖库

当依赖的项目较多时,手动安装相关依赖包较为复杂,并且多个项目多个版本的依赖包安装在系统中及容易造成冲突。若通过submodule的方式引入,下载编译耗时较长,同时也不好管理,对于还在开发过程中的项目来说影像效率。本文主要介绍两个帮助我们管理依赖库的工具的基本使用方法,抛砖引玉。它们分别是 vcpkg ,Anaconda( anaconda.com/ )

一个简单的小程序

我们写一个简单的展示图片的小程序

#include <stdio.h>
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char** argv )
    if ( argc != 2 )
        printf("usage: DisplayImage.out <Image_Path>\n");
        return -1;
    Mat image;
    image = imread( argv[1], 1 );
    if ( !image.data )
        printf("No image data \n");
        return -1;
    namedWindow("Display Image", WINDOW_AUTOSIZE );
    imshow("Display Image", image);
    waitKey(0);
    return 0;

在CMakeLists.txt中,我们使用find_package(详见 find_package的使用指南 )来引入opencv的库。

cmake_minimum_required(VERSION 3.0)
project( DisplayImage )
find_package( OpenCV REQUIRED )
include_directories( ${OpenCV_INCLUDE_DIRS} )
add_executable( DisplayImage DisplayImage.cpp )
target_link_libraries( DisplayImage ${OpenCV_LIBS} )

接下来我们使用vcpkg与anaconda两个工具安装opencv,并编译我们的项目。

使用vcpkg

vcpkg 是微软开源的一个库管理工具,并原生支持与cmake集成。vcpkg支持常见依赖库的一键安装,并支持cmake通过find_package一键引入。以下只介绍它的基础用法,具体文档请参考github vcpkg

安装vcpkg

> git clone https://github.com/Microsoft/vcpkg.git
> cd vcpkg
PS> .\bootstrap-vcpkg.bat
Linux:~/$ ./bootstrap-vcpkg.sh

然后, 集成 至本机环境中,执行 (注意: 首次启动需要管理员权限)

PS> .\vcpkg integrate install
Linux:~/$ ./vcpkg integrate install

使用以下命令安装任意包

PS> .\vcpkg install sdl2 curl
Linux:~/$ ./vcpkg install sdl2 curl

Tab补全/自动补全

vcpkg 支持在 Powershell 和 bash 中自动补全命令、程序包名称、选项等。如需启用自动补全功能,请使用以下命令:

PS> .\vcpkg integrate powershell