妈妈再也不用担心我的工程构建问题啦(VSCode+CMake开发Qt)

本文介绍了在Win10下如何利用CMake+VSCode来进行Qt开发

预备条件

  • 安装Qt
  • 将Qt的工具链路径添加到环境变量
  • 安装CMake
  • 安装VSCode
  • 安装VSCode插件:C/C++(C/C++语法提示)、CMake(CMake语法提示)、CMake Tools(快速搭建CMake工程,因为我们使用了Qt Creator,暂时用不到该工具)

以上工作,请提前做好。

第一部分:用QtCreator搭建CMake工程

打开QtCreator创建新工程,选择CMake作为构建系统,如下图所示

一路next,完成工程创建,如下图所示,点击运行,确保运行成功

关闭QtCreator并删除工程目录下的CMakeLists.txt.user(这是QtCreator工程配置文件)

第二部分:用VSCode开发Qt

用VSCode打开刚刚的dog工程文件夹,如下图所示

打开CMakeLists.txt,并在其中放入如下两行内容(具体内容,由你的编译器种类及其位置确定)

set(CMAKE_C_COMPILER "C:/Qt/Tools/mingw810_64/bin/gcc.exe")
set(CMAKE_CXX_COMPILER "C:/Qt/Tools/mingw810_64/bin/g++.exe")

如下图所示

在dog目录下创建build_debug目录,并进入该目录,然后执行如下命令

build_debug>cmake -G "MinGW Makefiles" -DCMAKE_C_COMPILER="C:/Qt/Tools/mingw810_64/bin/gcc.exe" -DCMAKE_CXX_COMPILER="C:/Qt/Tools/mingw810_64/bin/g++.exe"  -DCMAKE_BUILD_TYPE=Debug ..

没错,在CMakeLists.txt中添加的那两行只是为了命令行方便复制粘贴:-),除此之外,并没有其它用处。至于为什么是这样,文末QA中统一解释。

执行完命令后,请确保在输出终端中可以看到如下类似的构建信息

执行如下命令
build_debug>cmake --build .

观察编译输出信息,如下图所示

利用ls命令,可以发现dog.exe可执行文件,输入如下命令,执行该程序,观察程序是否正常运行
build_debug>.\dog.exe

可以发现,程序正常运行

第三部分:VSCode下实现Qt代码补全

之所以用VSCode,只是想利用它的代码编辑功能,其中代码补全功能尤为重要。下面是实现自动补全的方法。

观察VSCode底部,有一排小工具,如下图所示

从左到右依次是:可执行程序输出类型(Debug,Release)、kit选择、编译、调试、运行。

点击kit选择按钮,在顶部会出现VSCode扫描到的工具链(如果没有扫描到你想要的工具链,请在Windows环境变量中添加相应工具链的路径),如下所示

选择你想要的工具链,这里我们选择之前配置的工具链(观察工具链路径,与上一节命令行中的工具链路径要相同)。选完工具链后,点击编译(build)按钮,即可得到可执行程序,打开源文件,观察代码补全情况,如下图所示。

下面的其它按钮也都可以正常使用

QA

在CMakeLists.txt中加入的那两行是什么意思,难道只是为了命令行输入方便?

是的,只是为了输入方便,本以为可以直接在CMakeLists.txt中利用set设置工具链,但实际效果告诉我,不行!! 而且,即使行,也不推荐这样做,因为CMake的缓存有时候会覆盖这些设置,造成一些令人困惑的现象。

那条配置命令那么长,每次输入的时候,怎么记得住?

不用记住,实际上,只有在第一次搭建工程的时候需要利用该命令来输入一些基础工程信息,并不会频繁使用该命令。输入命令的时候,重点关注三件事:用什么工具链,想要生成什么类型工程(VS、NMAKE、MinGW)、想要可执行程序输出成什么类型(Debug、Release)。

可以新建两个文件夹(build_debug、build_release),分别用来构建debug程序,和release程序

在第三部分中所使用的方法好像已经实现了文章标题的目标,为什么还有第二部分那么多复杂的操作呢?

第二部分的核心目标是实现代码自动补全,其它的功能,如构建工具的选择、调试、运行,输出程序类型设定,我们通通用不到,这些功能,我们都利用命令行来实现。

代码补全功能的设置过程为什么那么奇怪?逻辑上好像不太能理解,常规的代码补全方法应该是添加头文件路径吧?

VSCode可以通过json配置文件来设置头文件路径实现代码补全,但配置过程过于繁琐,而上面的方法简单且正好实现了目标,所以就采用了上面的方法。上面的方法,应该是属于VSCode中一种叫做智能感知的功能。

其实不必太过于关于补全的具体机制,能补全就行了,不同的编辑器补全机制都不同。而且是否补全其实都无所谓的,只是一个锦上添花的功能。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值