注意
我们假设您已经阅读了?OpenCV 安装概述教程或具有使用 CMake 的经验。
可以通过几种不同的方式设置配置选项:
cmake -Doption=value ...
cmake -C my_options.txt ...
在本参考中,我们将使用常规命令行。
大多数选项都可以在 OpenCV 的根 cmake 脚本中找到:。某些选项可以在特定模块中定义。opencv/CMakeLists.txt
可以使用 CMake 工具打印所有可用选项:
最受欢迎和最有用的是以 、 、 开头的选项。WITH_
ENABLE_
BUILD_
OPENCV_
默认值因平台和其他选项值而异。
OPENCV_EXTRA_MODULES_PATH
option 包含一个以分号分隔的目录列表,其中包含将添加到构建中的额外模块。模块目录必须具有兼容的布局和CMakeLists.txt,简要说明可以在编码风格指南中找到。
例子:
注意
仅支持 0 级和 1 级深层模块位置,以下命令将引发错误:
CMAKE_BUILD_TYPE
选项可用于启用调试构建;生成的二进制文件将包含调试符号,并且大多数编译器优化将被关闭。若要在发布版本中启用调试符号,请打开该选项。BUILD_WITH_DEBUG_INFO
在某些平台(例如 Linux)上,必须在配置阶段设置构建类型:
在其他平台上,可以在同一个生成目录(例如 Visual Studio、XCode)中生成不同类型的生成:
如果您使用 GNU libstdc++(GCC 的默认值),您可以打开该选项,然后 C++ 库将在调试模式下使用,例如在向量元素访问期间将绑定检查索引。ENABLE_GNU_STL_DEBUG
可以使用选项禁用多种优化:CV_DISABLE_OPTIMIZATION
另请参阅
CMAKE_BUILD_TYPE — CMake 3.28.1 Documentation
https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_macros.html
CPU optimizations build options · opencv/opencv Wiki · GitHub
BUILD_SHARED_LIBS
选项控制是生成动态(.dll、.so、.dylib)还是静态(.a、.lib)库。默认值取决于目标平台,在大多数情况下为 。ON
例:
另请参阅
https://en.wikipedia.org/wiki/Static_library
ENABLE_PIC
设置?CMAKE_POSITION_INDEPENDENT_CODE?选项。它启用或禁用“与位置无关的代码”的生成。在构建要链接到动态库的动态库或静态库时,必须启用此选项。缺省值为 。ON
另请参阅
https://en.wikipedia.org/wiki/Position-independent_code
OPENCV_GENERATE_PKGCONFIG
选项允许文件生成与标准 CMake 包一起生成。此文件对于不使用 CMake 进行生成的项目非常有用。.pc
例:
注意
由于配置过程的复杂性,生成的文件可能包含不完整的第三方依赖项列表,并且可能在某些配置中不起作用,尤其是对于静态构建。此功能自 4.x 版本起不再正式支持,默认情况下处于禁用状态。.pc
有两种测试:准确性()和性能()。默认情况下,测试和应用程序处于启用状态。默认情况下不会生成示例,应显式启用示例。opencv_test_*
opencv_perf_*
对应的?cmake?选项:
每个模块都是目录的一个子目录。可以禁用一个模块:modules
相反的选项是仅构建指定的模块及其所依赖的所有模块:
在此示例中,我们请求了 3 个模块,配置脚本自动确定了所有依赖项:
配置脚本可以尝试从互联网上下载额外的库和文件,如果做不到,相应的功能将被关闭。在某些情况下,可能会发生配置错误。默认情况下,所有文件首先下载到该目录,然后解压缩或复制到构建目录。可以通过设置环境变量或配置选项来更改下载缓存位置:<source>/.cache
如果通过代理访问,在运行 cmake 之前需要设置相应的环境变量:
下载过程的完整日志可以在构建目录 - 中找到。此外,对于每次失败的下载,都会在构建目录中的帮助程序脚本中添加一个命令,例如 .用户可以按原样运行这些脚本,也可以根据需要进行修改。CMakeDownloadLog.txt
download_with_wget.sh
在x86_64机器上,默认情况下,该库将针对 SSE3 指令集级别进行编译。可以通过配置选项更改此级别:
注意
其他平台有自己的指令集级别:在 ARM 上,在 PowerPC 上。VFPV3
NEON
VSX
一些函数支持调度机制,允许为多个指令集编译它们,并在运行时选择一个。在配置过程中,可以更改已启用的指令集列表:
要禁用调度机制,应将此选项设置为空值:
可以禁用优化的代码部分以进行故障排除和调试:
注意
有关 CPU 优化选项的更多详细信息,请参见 wiki:CPU optimizations build options · opencv/opencv Wiki · GitHub
以下选项可用于生成具有检测或改进安全性的特殊版本。默认情况下,所有选项都处于禁用状态。
选择 | 编译器 | 描述 |
---|---|---|
ENABLE_PROFILING | GCC 或 Clang | 启用分析编译器和链接器选项。 |
ENABLE_COVERAGE | GCC 或 Clang | 启用代码覆盖率支持。 |
OPENCV_ENABLE_MEMORY_SANITIZER | 不适用 | 在代码中启用多个怪癖以帮助内存清理器。 |
ENABLE_BUILD_HARDENING | GCC、Clang、MSVC | 启用编译器选项,以减少代码利用的可能性。 |
ENABLE_LTO | GCC、Clang、MSVC | 启用链路时间优化 (LTO)。 |
ENABLE_THIN_LTO | 铛 | 启用精简 LTO,将中间位码合并到二进制文件中,使消费者能够在以后优化其应用程序。 |
另请参阅
以下选项可用于为每个函数启用 IPP 优化,但会增加 opencv 库的大小。默认情况下,所有选项都处于禁用状态。
选择 | 功能 | + 粗略尺寸 |
---|---|---|
OPENCV_IPP_GAUSSIAN_BLUR | GaussianBlur() | +8兆字节 |
OPENCV_IPP_MEAN | mean() /?meanStdDev() | +0.2兆字节 |
OPENCV_IPP_MINMAX | minMaxLoc() /?minMaxIdx() | +0.2兆字节 |
OPENCV_IPP_SUM | sum() | +0.1兆字节 |