Windows VScode C/C++ opencv环境配置说明

1. 需要安装软件MinGW,安装网站链接

MinGW-w64 - for 32 and 64 bit Windows - Browse /Toolchains targetting Win64/Personal Builds at SourceForge.net

注意需要安装版本x86_64-win32-seh

参考网址:

Windows11下VSCode的C/C++环境搭建与配置 - 度若飞 - 博客园

2. 对于多个文件的情况,需要安装编译器CMake

参考网址:

vscode一键配置C/C++多个C及CPP文件编译与tasks.json和launch.json原理_拐几个弯的博客-CSDN博客_vscode编译多个cpp文件

3. 配置VSCode对应工程的c_cpp_properties.json,tasks.json及launch.json

c_cpp_properties.json

{
    "configurations": [
        {
            "name": "Win32",
            "includePath": [
                "${workspaceFolder}/**",
                "C:\\Program Files (x86)\\opencv"
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            "compilerPath": "C:\\Program Files (x86)\\mingw64\\bin\\gcc.exe",
            "cStandard": "gnu17",
            "cppStandard": "gnu++14",
            "intelliSenseMode": "windows-gcc-x64",
            "configurationProvider": "ms-vscode.makefile-tools"
        }
    ],
    "version": 4
}

launch.json

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) Launch", // 配置名称,将会在启动配置的下拉菜单中显示
            "type": "cppdbg", // 配置类型,这里只能为cppdbg
            "request": "launch", // 请求配置类型,可以为launch(启动)或attach(附加)
            "program": "${workspaceFolder}\\build\\bin\\main.exe", // 将要进行调试的程序的路径
            "args": ["\\imgs\\img.png","E:\\1\\code\\SobelFilter-master\\imgs\\imgout","512x512"], // 程序调试时传递给程序的命令行参数,一般设为空即可
            "stopAtEntry": false, // 设为true时程序将暂停在程序入口处,我一般设置为true
            "cwd": "${workspaceFolder}", // 调试程序时的工作目录
            "environment": [],
            "externalConsole": true, // 调试时是否显示控制台窗口,一般设置为true显示控制台,
                                      // 但是最新版cpptools有BUG,具体请看文末的注意
            "internalConsoleOptions": "neverOpen", // 如果不设为neverOpen,调试时会跳到“调试控制台”选项卡,你应该不需要对gdb手动输命令吧?
            "MIMode": "gdb", // 指定连接的调试器,可以为gdb或lldb。但目前lldb在windows下没有预编译好的版本。
            "miDebuggerPath": "C:\\Program Files (x86)\\mingw64\\bin\\gdb.exe", // 调试器路径,Windows下后缀不能省略,Linux下则去掉
            "setupCommands": [ // 用处未知,模板如此
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": false
                }
            ],
            "preLaunchTask": "makeRun", // 调试会话开始前执行的任务,一般为编译程序。与tasks.json的label相对应
        }
    ]
    
}

task.json

{
    "tasks": [
        {
            // 任务一: 创建 build 文件夹
            "type": "shell",
            "label": "CreateBuildDir", // lable 标记任务名称
            "command": "mkdir",  // 命令
            // 传给上面命令的参数,这里是传给 Unix 系统的参数,windows下稍有不用,下边有
            "args": [
                "-p",
                "build"
            ],
            "windows": {
                "options": {
                    "shell": {
                        "executable": "powershell.exe"
                    }
                },
                "args": [   // 对于windows系统,传的参数
                    "-Force",
                    "build"
                ]
            },
            "options": {
                "cwd": "${workspaceFolder}"
            },
            "problemMatcher": [
                "$gcc"
            ],
        }, 
        // 任务二: Cmake
        // 在 build 文件夹中调用 cmake 进行项目配置
        // 如果想配置比如 release 还是 debug 可以添加参数或者在
        // CMakeLists.txt中设置也行
        {
            "type": "shell",
            "label": "cmakeRun", // 给这个任务起个名字
			// 这里的cmake,用我后面小程序创建的结果填的是全路径,
			// 命令写全路径,则路径中不能包含带空格
			// 如果你添加了环境变量,那么直接填写命令即可,也不会有
			// 路径是否包含空格的问题(下面的命令同理)
            "command": "cmake",
            "args": [
            	//"-DCMAKE_MAKE_PROGRAM=C:\\Program Files (x86)\\mingw64\\bin\\mingw32-make.exe", // MinGW目录下bin目录下的mingw32-make.exe
                "-G MinGW Makefiles",
                // 不使用-G "Unix Makefiles" 参数可能会编译成了VS用的工程文件
                // 之所以三个斜杠,是因为vscode终端自己还要转义一次
                // 2021-01-21更新:我在32位的win7上发现,vscode自己又不转义了
                // 所以如果以下三个斜杠不行的话,大家手动改成一个斜杠就好,即\"Unix Makefiles\"
                // 后面我给的小程序默认写的是3个
                //"\\\"Unix Makefiles\\\"",  
                "../"  // ../ 表示build文件夹的上级目录,CMakeLists.txt就放在上级目录中
            ],
            "options": {
                "cwd": "${workspaceFolder}/build"
            },
            "dependsOn":[
                "CreateBuildDir"  // 表示在 创建目录 任务结束后进行
            ]
        },
        // 任务三: make编译
        {
            "type": "shell",
            "label": "makeRun",
            "command": "mingw32-make.exe",  // 这个也是MinGW目录下bin目录下的mingw32-make.exe,如果添加了环境变量,这里直接写mingw32-make.exe
            "args": [],
            "options": {
                "cwd": "${workspaceFolder}/build"
            }, // 注意这里是编译到了项目文件夹下的 build 文件夹里面,这里就解释了
            // 为什么 launch.json 中 program 路径要那么设置了。
            "dependsOn":[
                "cmakeRun"  // 表示在Cmake任务结束后进行
            ]
        },
    ],
        
    "version": "2.0.0"
}

4. 安装opencv

请注意:OpenCV有很多版本,在MinGW下,应该选择MinGW对应的版本,否则,会报类似错误:

CMake Error at cvBlob/CMakeLists.txt:20 (find_package):
 Found package configuration file:

/usr/local/share/OpenCV/OpenCVConfig.cmake

but it set OpenCV_FOUND to FALSE so package "OpenCV" is considered to be
NOT FOUND.


-- Configuring incomplete, errors occurred!

下载地址:

GitHub - huihut/OpenCV-MinGW-Build: MinGW 32bit and 64bit version of OpenCV compiled on Windows. Including OpenCV 3.3.1, 3.4.1, 3.4.1-x64, 3.4.5, 3.4.6, 3.4.7, 3.4.8-x64, 3.4.9, 4.0.0-alpha-x64, 4.0.0-rc-x64, 4.0.1-x64, 4.1.0, 4.1.0-x64, 4.1.1-x64, 4.5.0-with-contrib, 4.5.2-x64

5. CMakeLists.txt配置

# cmake 的版本要求
cmake_minimum_required(VERSION 3.14) 

# 项目名称
project(main)

# 设置 Debug 模式
set(CMAKE_BUILD_TYPE "Debug")

# 设置源文件根目录,并设置别名为DIR_ROOT
aux_source_directory(. DIR_ROOT)

# 设置myCppPractice版本标准
set(CMAKE_CXX_STANDARD 14)
set(OpenCV_DIR C:/Program\ Files\ (x86)/opencv)
set(OpenCV_FOUND 1)
#set(OpenCV_RUNTIME vc15)
# 项目包含哪些 文件
add_executable(${PROJECT_NAME} main.c sobel.c file_operations.c)

# 添加目录下的文件,然后在add_executable中添加${DATA_SRC}
#set(DATA_SRC src/Data.cpp)
find_package(OpenCV REQUIRED)
set(OpenCV_FOUND 1 )
# 声明三方库位置路径
set(SDL2_DIR C:/Program\ Files\ (x86)/mingw64/)

# headers头文件位置-多个用空格隔开
include_directories(${SDL2_DIR}/include ${OPENCV_INCLUDE_DIRS})

# 推荐使用find_package和find_library寻找共享库的绝对路径,再传给target_link_libraries使用。
#find_library(SDL2MAIN SDL2main ${SDL2_DIR}/lib)
#find_library(SDL2 SDL2 ${SDL2_DIR}/lib)
#find_library(SDL2IAMGE SDL2_image ${SDL2_DIR}/lib)

# 链接库
#target_link_libraries(${PROJECT_NAME} mingw32 ${SDL2MAIN} ${SDL2} ${SDL2IAMGE} m)
target_link_libraries(${PROJECT_NAME} mingw32 m ${OpenCV_LIBS})

#project(test VERSION 0.1.0)

#include(CTest)
#enable_testing()

#add_executable(test main.cpp)

#set(CPACK_PROJECT_NAME ${PROJECT_NAME})
#set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
#include(CPack)

你可能感兴趣的:(opencv,c++,windows,vscode,c语言)