这是一个 CMake 模板库
你可以在CMake官方网站找到下载链接、官方文档以及一份简单的官方教程
每一个Cmake模板都是基于此目录进行的,具体每个项目可能由于其
.
├─.vscode # VSCode 配置文件
| ├─c_cpp_properties.json #
| ├─launch.json #
| └─setting.json #
├─app # 测试文件目录
├─bin # 二进制输出(编译后产生)
├─build # cmake 构建和 make 编译输出文件目录
├─include # 头文件
| ├─<file>.hpp
| └─...
├─src # 源文件
├─tools # 编译工具链(也可以将工具链添加到系统环境变量中)
├─.clang-format # clang-format 文件(代码自动格式化工具)
├─build.bat # bat 编译脚本
├─build.sh # shell 编译脚本
├─CMakeLists.txt # 根目录的CMake配置文件
└─README.md
在 Cmake 项目的根目录下
cmake_minimum_required(VERSION 3.10)
project(dataStructure)
# ==================================
# C/CXX standard
# ==================================
set(CMAKE_C_COMPILER "gcc")
set(CMAKE_CXX_COMPILER "g++")
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_FLAGS "-g -fexec-charset=utf-8 -m64 ")
# set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")
set(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")
add_subdirectory(src)
add_subdirectory(app)
CMake模板 templates/compile-executable_file
是一个编译可执行文件的模板。
see directory dynamic-library
for details that how to compile dynamic link library
see directory static-library
for detail that how to compile static link library
download gflags in GitHub, see "Installing a binary distribution package"
对于OpenCV,我们选择从源码编译的方式。源码编译采用CMake,确保设备上安装了下面依赖:
- CMake
- g++
- wget
在 Github 上下载相同版本的 opencv 和 opencv_contrib 源码的Release版本
OpenCV下载较慢,可以选择在国内镜像里面下载(版本并不一定是最新的)
下面是基于Opencv 4.5.3版本进行的。
源码编译可以参考官方的编译教程 Installation in Linux。
在用CMake构建项目时,需要进行编译选项的配置,这些配置可以参考 OpenCV compile configuration options reference 。有一些编译选项在官方也并没有列举出来,那么这时候,为了查看完整的编译选项,可以使用cmake-gui
来构建项目,并且可以查看当前版本下全部编译选项。
下载完成后,请将 opencv 和 opencv_contrib 解压放置到同一目录下,并且新建一个download
目录,然后将 docs/opencv 下的脚本文件,复制到相同目录下
例如在当前项目中的 3rd-party 目录下创建 opencv 目录(使用powershell脚本)
mkdir 3rd-party/opencv
cd 3rd-party/opencv
那么 3rd-party/opencv
的目录结构为,<OpenCV_VERSION>
需要修改为需要编译的opencv的版本
.
├─download
├─opencv_contrib-<OpenCV_VERSION>
├─opencv-<OpenCV_VERSION>
├─build-opencv.bat # script for windows
├─build-opencv.sh # script for linux/macOS
└─...
之后就可以根据系统来开始编译Opencv
准备好上述文件后,我们开始进行“尝试”编译
cd opencv-<OpenCV_VERSION>
mkdir build
cd build
cmake .. -G "MinGW Makefiles"
在上述cmake构建项目的过程中,你会在终端看到一些“不和谐”的输出:
-- FFMPEG: Download: ffmpeg_version.cmake
-- Try 1 failed
--
=======================================================================
Couldn't download files from the Internet.
Please check the Internet access on this host.
=======================================================================
CMake Warning at cmake/OpenCVDownload.cmake:202 (message):
FFMPEG: Download failed: 6;"Couldn't resolve host name"
For details please refer to the download log file:
.../CMake/3rd-party/opencv/opencv-4.5.3/build/CMakeDownloadLog.txt
这表示有一些文件没有被下载,这是由于“网速”原因。为了解决这个问题,你可以在 build/CMakeDownloadLog.txt 文件中查看哪些文件需要被下载、下载链接以及放置目录,例如
#do_copy "ffmpeg_version.cmake" "8862c87496e2e8c375965e1277dee1c7" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/213fcd5d4897319a83207406036c4a5957fba010/ffmpeg/ffmpeg_version.cmake" ".../CMake/3rd-party/opencv/opencv-4.5.3/build/3rdparty/ffmpeg"
#check_md5 ".../CMake/3rd-party/opencv/opencv-4.5.3/build/3rdparty/ffmpeg/ffmpeg_version.cmake"
#mismatch_md5 ".../CMake/3rd-party/opencv/opencv-4.5.3/build/3rdparty/ffmpeg/ffmpeg_version.cmake" "f8e65dbe4a3b4eedc0d2997e07c3f3fd"
...
找到 #do_copy
一行,会看到需要下载的文件ffmpeg_version.cmake
,以及下载链接https://raw.githubusercontent.com/.../ffmpeg_version.cmake
,并且可以看到需要将该文件放置到目录下.../build/3rdparty/ffmpeg
通常会有如下文件需要下载:
需要下载的文件及其链接 | 放置的位置 |
---|---|
v0.1.1f.zip | build/3rdparty/ade/v0.1.1f |
opencv_videoio_ffmpeg.dll | build/3rdparty/ffmpeg/opencv_videoio_ffmpeg.dll |
opencv_videoio_ffmpeg_64.dll | build/3rdparty/ffmpeg/opencv_videoio_ffmpeg_64.dll |
ffmpeg_version.cmake | build/3rdparty/ffmpeg/ffmpeg_version.cmake |
detect.caffemodel | build/downloads/wechat_qrcode/detect.caffemodel |
detect.prototxt | build/downloads/wechat_qrcode/detect.prototxt |
sr.caffemodel | build/downloads/wechat_qrcode/sr.caffemodel |
sr.prototxt | build/downloads/wechat_qrcode |
boostdesc_bgm.i | build/downloads/xfeatures2d/boostdesc_bgm.i |
boostdesc_bgm_bi.i | build/downloads/xfeatures2d/boostdesc_bgm_bi.i |
boostdesc_bgm_hd.i | build/downloads/xfeatures2d/boostdesc_bgm_hd.i |
boostdesc_binboost_064.i | build/downloads/xfeatures2d/boostdesc_binboost_064.i |
boostdesc_binboost_128.i | build/downloads/xfeatures2d/boostdesc_binboost_128.i |
boostdesc_binboost_256.i | build/downloads/xfeatures2d/boostdesc_binboost_256.i |
boostdesc_lbgm.i | build/downloads/xfeatures2d/boostdesc_lbgm.i |
vgg_generated_48.i | build/downloads/xfeatures2d/vgg_generated_48.i |
vgg_generated_64.i | build/downloads/xfeatures2d/vgg_generated_64.i |
vgg_generated_80.i | build/downloads/xfeatures2d/vgg_generated_80.i |
vgg_generated_120.i | build/downloads/xfeatures2d/vgg_generated_120.i |
face_landmark_model.dat | build/testdata/cv/face//face_landmark_model.dat |
如果将上述文件下载后,放置到与编译脚本 build-opencv.*
同级的目录 download
下,就可以很方便的用脚本进行编译
编译前请仔细查看编译脚本opencv/build-opencv.*
,需要修改:
- OpenCV的版本
OPENCV_VERSION
- CMake的编译选项
-D
,可以参考 OpenCV compile configuration options reference 。
有一些编译选项在官方也并没有列举出来,那么这时候,为了查看完整的编译选项,可以使用cmake-gui
来构建项目,并且可以通过UI界面来查看当前版本下全部编译选项。
比较重要的几个编译选项,例如:-D CMAKE_INSTALL_PREFIX=~/Programs/opencv
: Opencv需要安装的位置(这里推荐安装到用户目录下),便于之后CMake项目链接OpenCV库-D BUILD_opencv_python2=OFF
,-D BUILD_opencv_python3=OFF
: 该项目不编译python版本的opencv,如果需要为python安装opencv,建议pip3 install opencv-python
,如果需要处理与视频相关的操作,那么才需要用该项目编译python版本的opencv
- 编译使用的线程数
-j
,默认是8线程编译make -j8
,根据电脑配置进行修改,单线程则是make
,十六线程则是make -j16
。当出现编译错误的时候,首先考虑修改编译线程数为单线程编译,重新进行编译,有概率能够解决问题。
set CV_VERSION=4.5.3
cd opencv-%CV_VERSION%
md build
md build\3rdparty\ffmpeg
copy ..\download\*.cmake build\3rdparty\ffmpeg\
copy ..\download\*.dll build\3rdparty\ffmpeg\
md build\downloads\wechat_qrcode
copy ..\download\*.caffemodel build\downloads\wechat_qrcode
copy ..\download\*.prototxt build\downloads\wechat_qrcode
md build\downloads\xfeatures2d\
copy ..\download\*.i build\downloads\xfeatures2d\
md build\testdata\cv\face\
copy ..\download\face_landmark_model.dat build\testdata\cv\face\
cd build
cmake .. ^
-G "MinGW Makefiles" ^
-D CMAKE_INSTALL_PREFIX=~/Programs/opencv ^
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-%CV_VERSION%/modules ^
-D OPENCV_GENERATE_PKGCONFIG=ON ^
-D CMAKE_BUILD_TYPE=Release ^
-DBUILD_opencv_python2=OFF ^
-DBUILD_opencv_python3=OFF ^
-D BUILD_SHARED_LIBS=ON^
-D WITH_CUDA=OFF ^
-D OPENCV_DNN_CUDA=OFF ^
-D WITH_ONNX=OFF ^
-D WITH_1394=OFF
make -j8
make install
修改脚本以适配你的设备,随后可以简单的用脚本进行编译:
./build-opencv.bat
编译完成之后需要检查安装目录,也就是编译选项中的CMAKE_INSTALL_PREFIX
(~/Programs/opencv
),安装目录应该如下:
.
├─bin
├─etc
├─include
├─x64
├─LICENSE
├─OpenCVConfig.cmake
├─OpenCVConfig-version.cmake
└─setup_vars_opencv4.cmd
其中OpenCVConfig.cmake
和OpenCVConfig-version.cmake
是非常重要的两个文件,CMake能够链接到OpenCV库就是寻找这两个文件。setup_vars_opencv4.cmd
是设置OpenCV环境变量的脚本
在CMake项目中使用参考 Cmake+OpenCV 模板
In LLVM official website, choose corresponding Clang-Format Release for your OS in Other builds.
Then, you can download LLVM in this page or in Github Release
when installing LLVM,
in page Install Options
, select if add LLVM to the system
- Do not add LLVM to the system PATH
- Add LLVM to the system PATH for all user
- Add LLVM to the system PATH for current user
use clang-format
with parameter -style
and -i
-style
LLVM、Google、Chromium、Mozilla、WebKit or file(.clang-format)-i
clang-format -style=LLVM -i test.c
or you can edit your custom format file .clang-format
,
clang-format -i test.c
see Clang documentation for more detail of using Clang-Format
in file .git/config
[remote "origin"]
url = https://gitee.com/<user_name>/<repo_name>.git
url = https://github.com/<user_name>/<repo_name>.git
fetch = +refs/heads/*:refs/remotes/origin/*
A command-line utility for retrieving files using HTTP, HTTPS and FTP protocols.
Download:
- Windows binaries of GNU Wget (Downloading ZIP and add to system PATH is recommended.)