C++下使用各种三方库是不可避免的,如果不借助任何包管理工具,在QtCreator下,如何玩转三方库...
考虑如下一个极度简化的使用第三方库的场景:
- 电脑上有多套Qt:Qt5.15,Qt6.8,...
- 同时安装了多套OpenCV:OpenCV4.0,OpenCV4.10,...
应该如何配置,才能隐藏这些细节。使得在同一个项目文件(.pro 或 CMakeLists.txt)中,不写死任何路径, 又可以随意切换,
比如:在同一个QtCreator下,在如下配置下自由切换:
- Qt5.15 + OpenCV4.0
- Qt5.15 + OpenCV4.10
- Qt6.8 + OpenCV4.0
- Qt6.8 + OpenCV4.10
- ...
其实,很简单
只需要充分利用Qt Creator的Kits功能,克隆(copy)出来不同的配置,做些微调就行了。效果如下:
那么需要调整什么?
需要做什么?
两件事:
- 让cmake能找到三方库(
OpenCVConfig.cmake
) - 让qmake能找到三方库(
opencv.prf
)
我们以 Windows 下 Qt6.8 + OpenCV4.0 配置为例
克隆Qt默认配置
克隆 Desktop Qt 6.8.0 MSVC2022 64bit
配置文件,名字改为自己喜欢的以便于区分:
1 |
|
确定 OpenCV 位置
假定OpenCV位于 D:/Qt/opencv-4.0.1-vs2015-x64/
,那么
需要确认:OpenCVConfig.cmake
在哪个具体位置,比如
1 |
|
让 cmake 找到三方库
要让 cmake的 find_package()
能找到所需要的库,它有一套复杂的
查找规则。
可以通过各种环境变量(比如CMAKE_PREFIX_PATH
)或者cmake变量(比如 <PackageName>_ROOT
或 <PackageName>_DIR
)
进行控制。
我们继续考虑简单的场景,在命令行下,只需要将如下选项传递给cmake即可:
1 |
|
问题转化成,如何在Qt Creator下实现同样效果?
在 Kits 配置中,将上述内容加入 CMake Configuration
即可。
让 qmake 找到第三方库
尽管早已不建议继续使用 qmake,为了完整性,此处仍给出个人早期常用方案。
首先,为每一个opencv的库,准备一个 opencv.prf 文件,内容大致如下:
1 2 3 4 5 6 7 8 9 10 11 |
|
而后,通过如下环境变量告诉 qmake 它在什么地方
1 |
|
在Qt Creator下,在 Kits 配置中,将上述内容加入 Environment
即可。
重复操作
重复如上操作,即可完成不同 kits 的配置
最终配置结果,会放在如下文件中:
1 |
|
使用
Kits环境配置完毕后,所有细节对各个项目都是隐藏的:
cmake 项目
1 2 3 4 5 6 7 8 9 10 11 |
|
qmake 项目
.pro 文件只需要如下这样
1 2 3 4 |
|
参考
- https://cmake.org/cmake/help/latest/command/find_package.html#config-mode-search-procedure
- https://discourse.cmake.org/t/packagename-root-vs-package-dir/10361/3
- https://doc.qt.io/qt-6/qmake-advanced-usage.html