[Experience sharing] Qt开发:Cmake配置-关于find_package指令的基本使用
Tofloor
poster avatar
deepin
2024-06-07 18:44
Author

Qt Cmake配置案例

使用find_package指令,查找并获取Qt库,并让Qt库在项目的子级目录获取。

使用场景

image.png

比如,项目中有一些子目录,这些子目录的头文件、cpp文件都需要依赖Qt库、或第三方库时,我们可以直接从项目最外面的父级目录的cmake文件中进行配置。

基本的使用方法

在上面使用场景的图片中,liucad这个父级目录里面有很多子级目录,比如子级目录有:src、actions、cmd、lib、main、plugins、test、ui。其中,有些子目录在自己的项目中仍然需要依赖Qt库的使用,不然这些子目录中的xxx.hxxx.cpp文件的include会有红色报错提示。

下面,我们具体来看怎么实现,步骤如下:

(1).查看cmake项目中的Moudles,这里会提供获取qt库版本的cmake配置;

image.png

2.虽然我们已经知道qt库已经加入到项目中,但也只是能在父级目录liucad中使用。需要通过find_package的指令添加,让查询出来的Qt库能继续传递到更多子级目录中。

image.png

3.注意,在父级目录liucad的cmake配置中,打印其qt库版本的信息,可在Qt Creator界面中的“概要信息”中进行查看。

image.png

4.当父级目录liucad查获到qt库后,我们可以以子级目录main中继续获取对Qt库的依赖,通过target_link_libraries指令进行qt库的链接,让cpp源文件、h头文件能正常include 关于qt库中的ui类和其它gui类。

image.png

5.检查子级目录main的CPP源文件和h头文件,看Qt库相关类是否被正常include。

image.png


结语

随着cmake项目的文件结构变得越加繁杂,项目中子目录的数量会变得越来越多,对各种库的依赖也会变得更多,find_package指令的使用反而让其依赖的传递变得简单。如果您对其使用有更好的建议,可在评论区进行评论,希望能共同进步。

Reply Favorite View the author
All Replies
wlly-lzh
deepin
2024-06-07 19:13
#1

依赖的传递靠的是cmake子节点对父节点的继承,父节点所有的变量、依赖都会被子节点继承。

findpackage的作用是查找库,不要说什么findpackage让传递依赖变得容易。


评价:误人子弟

Reply View the author
deepin
2024-06-08 01:56
#2
wlly-lzh

依赖的传递靠的是cmake子节点对父节点的继承,父节点所有的变量、依赖都会被子节点继承。

findpackage的作用是查找库,不要说什么findpackage让传递依赖变得容易。


评价:误人子弟

感谢指正。

Reply View the author