使用qt creator来编译 调试 用CMakeLists组织的工程
爱情原如树叶一样,在人忽视里绿了,在忍耐里露出蓓蕾。 —— 何其芳
使用CMake作为构建系统,需要自己写CMakeLists.txt,相当于qmake下的pro。
1 打开用CMakeLists.txt组织的工程:
下面是用qt creator 3.5.1做的实验:
点击file---打开文件,找到CMakeLists.txt文件,然后会弹出如下图所示的对话框,qt creator会询问你是否在存放CMakeLists.txt的文件夹的同级目录下建立另一个文件夹xxx-build,亦可以自己指定。 后面运行cmake,编译时生成的中间文件以及最终的可执行文件都会存放在这个文件夹。 相当于自己手动调用cmake编译时,一般先建立一个名字为bulid的文件夹,然后,在命令行下将路径切换到build文件夹内部,运行 cmake "CMakeLists.txt所在的路径"。
同时,它会让你在下图的Arguments行输入cmake指令,我用的是cmake 后面跟CMakeLists.txt的全路径,即如果CMakeLists.txt存放在/home/bb/cc文件夹,则cmake /home/bb/cc。
Generator行,我选择的是下图的,还有一个Ninja(Desktop Qt5.5.1 GCC 32bit)可以选择,不知道是什么。
然后点击Run Cmake按钮,运行完后会提示:Build files have been written to: xxx。最后点击finish按钮,就可以进入正常的编辑界面了,所有的文件都会组织好,显示出文件树。
现在高版本的qt creator,例如qt creator4.6,打开该种工程时,可以直接选择CMakeLists.txt,qt creator会自动配置好,可以选择build目录。
cmake的版本问题:
CMakeLists.txt文件的第一句一般对cmake的版本有要求例如:
cmake_minimum_required(VERSION 3.10)
如果当前使用的版本过低,安装高版本即可:https://blog.csdn.net/qq_35865125/article/details/81557738
例如在linux下安装,我曾经安装到了/usr/local/Cmake3.12.1路径下,然后通过qt creator的tool--options调出cmake设置界面,进行选择即可:
然后,为你使用的kit选择最新的cmke:
2 使用qt creator进行单步调试:
方法一:(原文作者并不推荐)由于CMake默认产生的是Default/release版本。可以手动编辑CMakeLists.txt文件,在文件的最后添加:
set(CMAKE_BUILD_TYPE Debug),再次构建即可。
--------------但是,我将添加前后生成的makefile进行了比较,并没有任何区别。可能区别在与其他地方吧,如果不在最后添加set(CMAKE_BUILD_TYPE Debug)的话,一点击debug就会报错:
还可以在命令行设置:--亲测可行:
cmake -DCMAKE_BUILD_TYPE=Debug ..
注意每次CMakeLists.txt改变后,最好重新Run CMake,然而arguments不必每次都填写,因为cmake会在CMakeCache.txt中记录以前所有添加过的参数。如果你改变了CMake的参数,则直接删除CMakeCache.txt,重新生成,否则有问题。另外,在qt creator中点击clean按钮并不会清楚CMakeCache.txt。
build时,release模式和debug模式的区别是什么,是不是debug模式时,添加了更多的调试信息,以为单步执行做准备?。
方法二:(qt creator3.5.1中并没有相应的操作,qt creator4.6中有!相当方便!)
工程默认的构建方式是Default,也就是release的意思。需要调整为Debug才能实现单步断点调试。
勾选完成Debug之后,请在菜单->Build点击选项“Run CMake”即可。
3 如何添加C++/C源文件和头文件?又如何添加第三方依赖库库和头文件?
唯一的方式就是手动修改CMakeLists.txt文件。右键点击工程名字后弹出的框中,add file是灰色的,所以qt creator并不支持自动添加文件到cmakelists组织的工程,自己动动爪子。
ref:
https://blog.csdn.net/libaineu2004/article/details/78448392
https://blog.csdn.net/darkdong/article/details/6094336
使用qt creator来编译 调试 用CMakeLists组织的工程的更多相关文章
- Qt Creator配置MSVC调试器
安装完QT后会看到Qt Creator中的MSVC构建组件带有黄色的感叹号,那是因为没有调试器的原因.由于Qt-MSVC版本套件没有默认安装调试器, 需要我们自己手动下载安装. 根据官方文档http: ...
- Qt creator自定义编译运行步骤
一直用Qt creator开发.无它,只是因为linux下C++ IDE选择不多.同时因为我抛弃了MFC,平时写个小工具还得靠Qt,正好一举两用. 用Qt creator开发一般的工程,是不用修改编译 ...
- Qt Creator 中文编译失败 怎么办
在Qt Creator 中c++源码有中文字符,结果不能编译成功. 代码 QMessageBox::warning(this, "警告","用户名密码错误",Q ...
- windows下,Qt Creator 中javascript调试器安装并使用
最开始使用Qt Creator时,想使用断点来调试javascript代码.但在按下debug键后,却提示调试器未配置,让我比较郁闷. 好了,郁闷的是说了,咱们来说说高兴的.要Qt Creator调试 ...
- Ubuntu中Qt Creator无法启动调试
Ubuntu下安装Qt creator后无法启动调试,报错为Ptrace:Operation not permitted. 产生原因: 在Ubuntu 11.04("Natty Narwha ...
- 【ARM-Linux开发】【Qt开发】Qt Creator自定义编译运行步骤
原文:http://www.linuxidc.com/Linux/2015-04/115763.htm 一直用Qt Creator开发.无它,只是因为linux下C++ IDE选择不多.同时因为我抛弃 ...
- Qt Creator 中关于调试器的设置
Qt Creator3.4.2 Based on Qt 5.5.0 (MSVC 2013, 32 bit) 在安装了VS2013的电脑上能够自动识别VS编译器,却不能识别调试器 需要下载一个wdk,安 ...
- IMX6开发板qt creator直接编译ARM架构程序
除了通过 11.2.2 小节通过命令行的操作来编译在 iTOP-imx6 开发板上运行的程序,还可以直接在 qtcreator 上设置,然后每次编译的程序都可以在开发板上运行.如下图所示,打开 qtc ...
- Linux上使用Qt Creator进行C/C++开发
目录[-] 1.安装Qt Creator和基础构建环境(以Ubuntu为例): 2.把自动完成快捷键"Ctrl+空格"改为"Alt+/"或者"Shif ...
随机推荐
- 洛谷P2312解方程题解
题目 暴力能得\(30\),正解需要其他的算法操作,算法操作就是用秦九韶算法来优化. 秦九韶算法就是求多项式的值时,首先计算最内层括号内一次多项式的值,然后由内向外逐层计算一次多项式的值,然后就将求\ ...
- 【微信小程序】如何获取用户绑定手机号
用户调用wx.login()方法,获取登录用户凭证code wx.login({ success: function(res) { console.log('loginCode', res.code) ...
- (33)Vue购物车
computed:{ lists(){ return this.$store.state.list }, }, 用v-model来双向绑定input控制checkbox是否选中 Vue中双向数据绑定是 ...
- react 通过 xlink 方式引用 iconfont
项目中采用 xlink 的方式引用 iconfont 文件,在正常的 html 文件中可以正常引用,但是在 react 下确不可以运行. 经过查找,发现需要更改如下 引入的属性默认为 xlink-hr ...
- Mac zsh 所有命令失效
正在配置一些东西,然后zsh的所有命令不能用了. 我艹...... 然后一顿猛查,发现有个命令好使,记录一下 在命令行只想输入下面命令 PATH=/bin:/usr/bin:/usr/local/bi ...
- 【CSP模拟赛】方程(数学)
题目描述 求关于x的方程:x1+x2+……xk=n的非负整数解的个数. 输入格式 仅一行,包含两个正整数n,k. 输出格式 一个整数,表示方程不同解的个数,这个数可能很大,你只需输出mod 20080 ...
- setTimeout 的理解
setTimeout,延迟一段时间执行代码. setTimeout(func,0),这代码的作用并不是简单地和直接调用func一个效果: 1:动态往DOM树中插入元素,然后立刻操作这个元素(选择文本框 ...
- 数据结构Java版之递归与迭代算法(五)
递归的概念很简单,就是自己调用自己. 而迭代,则是通过修改初始化数据,得到中间结果,然后不断的对中间结果进行修改,而得到最终结果.简单来说迭代就是循环. 在此,我们用一个比较经典的Fibonacci数 ...
- css,js 学习记录
记录一些自己曾经阅读,值得收藏的网址 --(css3新特性) https://segmentfault.com/a/1190000010780991#articleHeader41 --CSS3 3D ...
- 【多线程与并发】Java中的12个原子操作类
从JDK1.5开始,Java提供了java.util.concurrent.atomic包,该包中的原子操作类提供了一种使用简单.性能高效(使用CAS操作,无需加锁).线程安全地更新一个变量的方式. ...