介绍
OpenCV_STATIC
是 OpenCV 在 Windows 独有的选项,用于控制是否静态链接 OpenCV 库。
1 | set(OpenCV_STATIC ON) |
在 Windows 本地手动用 CMake 构建安装的 OpenCV 库,无论使用的是 MSVC 还是 MinGW,得到的库的OpenCVConfig.cmake
文件中都是有OpenCV_STATIC
这个选项。而如果是用 vcpkg 安装的 OpenCV,那里面的OpenCVConfig.cmake
文件中是没有OpenCV_STATIC
选项的。
对于使用 MSVC 编译器工具链的项目,无论 OpenCV 是通过 vcpkg 安装的还是自己用 CMake 手动构建安装的,都是可以通过设置CMAKE_MSVC_RUNTIME_LIBRARY
的值,来设置自己的项目整体是静态链接还是动态链接,不需要单独设置OpenCV_STATIC
选项。
vcpkg 默认安装的是动态库版本。vcpkg 中的绝大多数库是有提供静态库版本的。像下面这样子,通过 Triplet 三元组,指定安装的库的目标平台和链接方式。
1 | vcpkg install opencv4 |
而如果项目使用的编译器是 MinGW,那么就需要用到OpenCV_STATIC
选项了。而且,像那样写是没有问题的,同样是跨平台的。在其他系统没有这个选项,也就不会有实际影响。
以下是在安装目录下,OpenCVConfig.cmake
中的内容。
1 | # Windows pack specific options: |
1 | if(NOT DEFINED OpenCV_STATIC) |
在 OpenCV 的 GitHub 仓库,cmake/templates
目录,是 CMake 的模板文件。OpenCV_STATIC
相关的内容就是在OpenCVConfig.root-WIN32.cmake.in
文件中。
相关工作
个人感觉,这个选项还是比较重要的。然而,网上很少有文章提到这个内容。
有个在 2010 年的提问,里面的回答是说到了OpenCV_STATIC
,但那位题主是在 Linux 下运行的,没有也不需要用到这个选项,而是直接添加-static
选项就行。
有的文章使用的是set(BUILD_SHARED_LIBS OFF)
的方式。从之前给的内容来说,这样做的效果也确实是OpenCV_STATIC
被设置为了ON
。但是BUILD_SHARED_LIBS
是一个全局选项,在现代 CMake 中不推荐这样直接写进去。而且这个选项一般是用于创建库的项目,一般不用于创建可执行文件的项目。
说些什么吧!