搭建conan+cmake+opencv+mingw+vscode开发环境

417 阅读7分钟

最近进阶学习计算机图形学,然后得用opencv c++的开发环境,emmm,强前端所难!多少年没碰c++了,搞得我一头雾水!幸好总算让我踩坑踩着踩着,就搭成功了!

1.mingw安装

MinGW(Minimalist GNU for Windows)是一个开源的开发环境,旨在为Windows平台提供基于GNU工具链的C和C++程序开发支持。

  • 在gitHub下载安装包,https://github.com/niXman/mingw-builds-binaries/releases

image.png

  • 根据自己需要选择对应版本,建议选择posix-seh的版本。我的电脑是win10 64位,选择了x86_64-14.2.0-release-posix-seh-msvcrt-rt_v12-rev1.7z

  • 我用的是压缩包,下载完直接解压到文件夹目录,然后将mingw64/bin路径配置到环境变量Path

image.png

  • 在cmd命令行窗口输入gcc -v,可以看到输出gcc版本信息, 代表安装成功了!

image.png

2.在vscode运行c++

  • 给vscode添加插件 image.png

  • 在vscode的settings.json配置一下include

{
  "C_Cpp.default.systemIncludePath": [
    "D:/software/mingw64/x86_64-w64-mingw32/include/",
    "D:/software/mingw64/lib/gcc/x86_64-w64-mingw32/14.2.0/include/c++",
    "D:/software/mingw64/lib/gcc/x86_64-w64-mingw32/14.2.0/include/c++/x86_64-w64-mingw32",
    "D:/software/mingw64/lib/gcc/x86_64-w64-mingw32/14.2.0/include/c++/backward",
    "D:/software/mingw64/lib/gcc/x86_64-w64-mingw32/14.2.0/include",
    "D:/software/mingw64/lib/gcc/x86_64-w64-mingw32/14.2.0/include-fixed"
  ],
  "C_Cpp.default.includePath": [
    "D:/software/mingw64/x86_64-w64-mingw32/include/",
    "D:/software/mingw64/lib/gcc/x86_64-w64-mingw32/14.2.0/include/c++",
    "D:/software/mingw64/lib/gcc/x86_64-w64-mingw32/14.2.0/include/c++/x86_64-w64-mingw32",
    "D:/software/mingw64/lib/gcc/x86_64-w64-mingw32/14.2.0/include/c++/backward",
    "D:/software/mingw64/lib/gcc/x86_64-w64-mingw32/14.2.0/include",
    "D:/software/mingw64/lib/gcc/x86_64-w64-mingw32/14.2.0/include-fixed"
  ],
  "C_Cpp.default.compilerPath": "D:/software/mingw64/bin/gcc.exe",
}
  • 创建项目,添加件main.cpp
#include <iostream>
int main()
{
    std::cout << "Hello, world! HAHAHA" << std::endl;
    return 0;
}
  • 在当前目录cmd命令行输入以下编译命令,会编译生成一个main.exe
gcc main.cpp -lstdc++ -o main.exe 
  • 命令行说明-l<library>链接某个库,-o <file>输出文件

  • 更多具体gcc命令行使用说明可以看这里菜鸟教程 GCC 参数详解

  • 在命令行中执行main.exe,会打印结果。

image.png

然后我发现一个很头大的事情,如果纯用gcc,要到github下载c++库,,而且还得每次命令行都要输入一堆-L<dir> -l<library> 链接库!啊啊啊,好烦!于是我试图找一下有没有更方便的方法,于是发现了可以用conan来管理c++库,cmake来配置链接库关系,简化构建过程。okk!

3.cmake安装

CMake(Cross-Platform Make)是一个跨平台的自动化构建系统,主要用于管理和构建软件项目。它通过配置文件(通常是CMakeLists.txt)来描述项目的构建过程,支持多种编程语言(如C、C++、Fortran等),并可以生成多种构建系统(如Makefile、Visual Studio项目文件、Xcode项目文件等)。

  • 直接官网下载https://cmake.org/download/,我的电脑是win10 64位,选了cmake-4.0.0-rc1-windows-x86_64.zip

image.png

  • 我用到是压缩包,下载完直接解压到文件夹目录,然后将cmake/bin路径配置到环境变量Path

image.png

  • 在cmd命令行窗口输入cmake -version,可以看到输出cmake版本信息, 代表安装成功了!

image.png

4.conan安装

官网:https://conan.io/

Conan 是一个开源的 C/C++ 包管理器,旨在简化依赖管理和跨平台构建过程。功能:

  • 依赖管理:Conan 可以从公共或私有存储库中自动下载和安装项目所需的依赖项。它支持多种操作系统和编译器,并且可以处理不同版本的依赖。
  • 跨平台支持:Conan 支持 Windows、Linux、macOS 等多种操作系统,能够生成不同平台的二进制文件。
  • 版本控制:开发者可以明确指定依赖库的版本,确保项目的稳定性和可复用性。
  • 包管理和分享:Conan 允许开发者将自己的库打包并分享到中央仓库或其他仓库,其他开发者可以轻松地安装和使用这些库。
  • 本地缓存:Conan 会缓存下载的依赖库,提高后续安装速度,并支持自定义缓存策略。

官网提供了好几种安装方法,我电脑有安装Python,于是采用pip安装conan。 更多安装方法请看官方文档

pip install conan
  • 在cmd命令行窗口输入conan -v,可以看到输出gcc版本信息, 代表安装成功了!

image.png

  • 因为我们要用gcc编译代码,所以配置一下conan的c++运行环境,在cmd命令窗口输入下面命令。
# 检测当前运行环境信息
conan profile detect --force
# 创建一个gcc的运行环境信息
conan profile detect --name "gcc"
  • 打开电脑user目录的.conan2\profiles\gcc文件修改一下运行信息,设置编译器为gcc,对应版本号,c++库等
[settings]
arch=x86_64
build_type=Release
compiler=gcc
compiler.cppstd=gnu17
compiler.libcxx=libstdc++11
compiler.version=14
os=Windows

注意.conan2文件夹p文件夹存储conan相关信息,其中p文件夹存储下载的库,profiles文件夹存储运行环境配置。settings.yml存储conan可用的一些设置项。

image.png

5.安装opencv库

  • 许多教程让直接下载官网的installer,或者下载官方github源码用cmake编译成build,而installer的方式会缺少编译后的库,容易编译的时候出现找不到opencv库。源码编译的方式还要cmake一下,编译也很花时间,并且报错也不知怎么处理。

  • 我建议到github下载OpenCV-MinGW-Build,这个是别人已经编译好的opencv版本。

  • 下载压缩包后解压到文件目录,然后将opencv/x64/mingw/binopencv/x64/mingw/lib两个目录配置环境变量Path

image.png

  • 为了避免vscode的c++文件使用opencv库的时候报错,需要添加opencv/include的路径到setting.jsoninclude库路径中

6.运行opencv项目

  • (1) 在项目中,创建conanfile.txt文件,配置需要下载的c++库。
[requires]
# 库/版本
zlib/1.3.1

[generators]
# 生成cmake依赖关系
CMakeDeps
# 生成cmake工具链
CMakeToolchain

因为这个项目已经安装了opencv不再用conan下载,上面只是简单的使用示范,需要其他库也可换行添加,可以在conan中心https://conan.io/center搜索查询库的信息。

  • (2) 创建CMakeLists.txt文件,配置构建,更多的cmake使用方法请看cmake菜鸟教程
cmake_minimum_required(VERSION 3.15)
# 项目名称
project( EdgeImage )
# 查找opencv库
find_package(OpenCV REQUIRED)
# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True)
# 设置编译结果输出路径
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin)
# 引入opencv的include库
include_directories(${OpenCV_INCLUDE_DIRS})
# 执行cpp文件
add_executable( ${PROJECT_NAME}  main.cpp )
# 链接opencv库
target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS})
  • (3) 创建main.cpp文件,调用opencv库,这里是个简单的opencv边缘检测的示例.
#include <stdio.h>
#include <opencv2/opencv.hpp>
using namespace cv;

void imageEdge(Mat image)
{
    // 转换为灰度图像
    Mat grayImage;
    cvtColor(image, grayImage, COLOR_BGR2GRAY);

    // Canny 边缘检测
    Mat edges;
    Canny(grayImage, edges, 100, 200); // 阈值1和阈值2

    imshow("ImageEdge", edges);
    imshow("Image", image);
}

int main(int argc, char **argv)
{
    if (argc != 2)
    {
        printf("请输入图片文件路径 <Image_Path>\n");
        return -1;
    }
    Mat image;
    // 读取图片数据
    image = imread(argv[1], IMREAD_COLOR);

    if (!image.data)
    {
        printf("没有图片数据 \n");
        return -1;
    }
    imageEdge(image);
    waitKey(0);
    return 0;
}
  • (4) 然后我们可以执行命令让conan编译出cmake配置。
# conan安装没有的c++库,设置用gcc来编译
conan install . --output-folder=build --build=missing --profile:host=gcc  --profile:build=gcc

可以看到build文件夹下cmake的相关配置文件,其中conan_toolchain.cmake文件里可以找到conan下载库的全路径。 image.png

  • (5) 接下切换到build目录,为cmake构建前进行配置
# 设置MinGW Makefiles为编译器,编译模式为release,使用conan_toolchain.cmake工具链
cmake .. -G "MinGW Makefiles" -DCMAKE_TOOLCHAIN_FILE="conan_toolchain.cmake" -DCMAKE_BUILD_TYPE="Release"
  • (6) 继续输入,编译命令,正式开始生成结果
cmake --build . --config Release
  • (7) 可以在bin文件下看到EdgeImage.exe,可以执行程序,对图片进行边缘检测。
EdgeImage ../logo.jpg

image.png

参考