1.使用vcpkg安装opencv库

1
./vcpkg install opencv:x64-windows --head --clean-after-build

2.在cmake中引入vcpkg管理的qt6静态库

1.main.cpp

1
2
3
4
5
6
7
8
9
10
#include <QCoreApplication>

int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
qDebug("hello,world\n");
qDebug() << "hi:" << "see you";
return a.exec();
}

2.cmakelists.txt

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
cmake_minimum_required(VERSION 3.16)

# 移除或修改三元组:改为动态版本 x64-windows
#set(VCPKG_TARGET_TRIPLET x64-windows)

project(FinalApp VERSION 0.1 LANGUAGES CXX C)

# 基础编码与标准设置
if(MSVC)
add_compile_options(/utf-8)
endif()

# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 4. 查找 OpenCV
find_package(OpenCV REQUIRED)

# 添加可执行文件
set(SOURCE main.cpp)
add_executable(${PROJECT_NAME} ${SOURCE})

# 输出到项目下的 bin 文件夹
set_target_properties(${PROJECT_NAME} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/bin/$<CONFIG>"
)
# 链接库
target_link_libraries(${PROJECT_NAME} PRIVATE
${OpenCV_LIBS}
)

3.CMakePresets.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
{
"version": 3,
"configurePresets": [

{
"name": "base-global",
"hidden": true,
"cacheVariables": {
"CMAKE_EXPORT_COMPILE_COMMANDS": "YES",
"CMAKE_TOOLCHAIN_FILE": "C:/D/test/CCpp/ccpplib/vcpkg/vcpkg/scripts/buildsystems/vcpkg.cmake"
}
},

{
"name": "base-ninja",
"hidden": true,
"generator": "Ninja",
"binaryDir": "${sourceDir}/out/build/${presetName}"
},

{
"name": "base-msvc",
"hidden": true,
"architecture": { "value": "x64", "strategy": "external" },
"toolset": { "value": "host=x64", "strategy": "external" },
"cacheVariables": {
"CMAKE_C_COMPILER": "cl.exe",
"CMAKE_CXX_COMPILER": "cl.exe"
},
"vendor": {
"jetbrains.com/clion": { "toolchain": "MSVC" }
}
},

{
"name": "opencv-debug",
"displayName": "OpenCV MSVC Debug",
"inherits": ["base-global", "base-ninja", "base-msvc"],
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"VCPKG_TARGET_TRIPLET": "x64-windows",
"X_VCPKG_APPLOCAL_COPY_INSTALL": "ON"
}
},

{
"name": "opencv-release",
"displayName": "OpenCV MSVC Release",
"inherits": ["base-global", "base-ninja", "base-msvc"],
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release",
"VCPKG_TARGET_TRIPLET": "x64-windows",
"X_VCPKG_APPLOCAL_COPY_INSTALL": "ON"
}
}
],
"buildPresets": [
{ "name": "debug", "configurePreset": "opencv-debug" },
{ "name": "release", "configurePreset": "opencv-release" }
]
}

4.命令行构建编译命令:

  • x64 架构:打开 **”x64 Native Tools Command Prompt for VS 2022”**。此时运行 cl.exe 会默认输出 x64 目标代码。
  • x86 架构:打开 **”x86 Native Tools Command Prompt for VS 2022”**。

如果已经在普通 CMD 中,可以通过调用脚本切换(注意必须使用 call):

1
call "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" x64
  1. 构建配置

Debug

1
2
3
4
cmake .. -B build -S . -G "Ninja" `
-DCMAKE_BUILD_TYPE=Release `
-DCMAKE_TOOLCHAIN_FILE="C:/D/test/CCpp/ccpplib/vcpkg/vcpkg/scripts/buildsystems/vcpkg.cmake" `
-DVCPKG_TARGET_TRIPLET=x64-windows

Release

1
2
3
4
5
6
7
cmake .. -B build -S . -G "Ninja" `
-DCMAKE_TOOLCHAIN_FILE="C:/D/test/CCpp/ccpplib/vcpkg/vcpkg/scripts/buildsystems/vcpkg.cmake" `
-DVCPKG_TARGET_TRIPLET=x64-windows `
-DOpenCV_DIR="C:/D/test/CCpp/ccpplib/vcpkg/vcpkg/installed/x64-windows-static/share/opencv4" `
-DCMAKE_BUILD_TYPE=Release `
-DCMAKE_C_COMPILER=cl.exe `
-DCMAKE_CXX_COMPILER=cl.exe `
  1. 编译

debug

1
cmake --build . --config Debug  

release

1
cmake --build . --config Release  

5.使用cmakepresent.json构建编译脚本

1
2
3
4
5
6
7
8
@echo off
:: 1. 自动挂载 MSVC 环境
call "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" x64
:: 2. 运行 CMake Preset
cmake --preset=opencv-release
:: 3. 运行构建
cmake --build --preset=release -j8
pause