转载地址:点击打开链接

根据VisualGDB官网(https://visualgdb.com)的帮助文档大致翻译而成。主要是作为个人学习记录。有错误的地方,Robin欢迎大家指正。

本文介绍如何使用VS来创建、构建、调试一个基于CMake的项目。当编辑该项目时,会使用高级CMake项目子系统来自动更新CMakeLists.txt文件。

注意:开始本文如下步骤之前,确保所使用的VisualGDB为5.3或更新版本。

1 选择Linux项目向导

启动VS并打开”New Project”对话框。”VisualGDB”下选择”Linux Project Wizard”:

2 选择项目类型

在”New Linux Project”页面,”Create a new project”->”Application(executable file)”->”Use CMake”,并勾选”Use the advanced CMake Project Subsystem”复选框:

3 选择Linux电脑

在下一页选择你的目标Linux电脑并点击”Next”。如果你之前没有使用VisualGDB配置过到这台电脑的连接,参考《使用VS来开发Linux程序》来建立连接。

4 设置源码访问方式

下一页设定Linux机器如何访问源码。最简单的方式是采用默认设置:将修改的源码更新到Linux机器上。

你也可以配置VisualGDB将源码直接存储在Linux机器上,并通过SSH方式访问。具体参考《配置VS直接通过SSH方式访问Linux项目》。

5 构建项目

项目创建好后,点击Ctrl+Shift+B来build你的solution:

6 断点调试

在main()函数中设置一个断点,按F5确保项目能够调试:

7 GUI方式管理项目target及修改各种配置

接下来介绍如何使用GUI来管理项目targets及修改各种settings。

7.1 再创建一个可执行程序

首先我们在创建一个可执行程序。Solution Explorer中,在”.vgdbcmake”节点上右键点击,选择”Add”->”New Item”,选择”Executable”,并在location中添加子目录”/subdir”:

VisualGDB会自动创建”subdir”文件夹,并在该文件夹下创建一个CMakeLists.txt文件,然后使主程序的CMakeLists文件引用该CMakeLists.txt文件。

然后将main.cpp文件的内存拷贝到新程序的文件中(只是需要替换hello信息),并构建该项目:

7.2 在新程序中再添加一个源文件

在新项目AnotherExecutable中再添加一个源文件:

在location中添加文件夹”subdir2”,并将新的源文件保存到该文件夹下:

7.3 配置属性/参数

在VisualGDB CMake Project中的每个CMake target都拥有各自独立的properties set。

调试相关的properties,比如命令行参数,都存到各自的项目文件中。

构建(build)相关的properties,比如include目录,将自动保存到CMakeLists.txt文件中。

对于主应用程序,打开VS Project Properties,并设置命令行参数为非空值:

7.4 调试观察

在主程序上右键,选择”Debug”->”Start”,启动一个新的程序实例并开始调试它:

现在可以观察一下VisualGDB如何启动选择的目标,以及命令行参数如何匹配target settings所设置的参数:

8 对源文件和目标进行分组管理

打开项目的VS Properties(通过节点.vgdbcmake),可以使用”Sorting/Grouping”下的配置来控制VisualGDB的分组策略。比如,设置”Group Source By Types”为”False”:

设置后,可以看到”Source Files”节点消失了,然后所有的源文件显示在目标节点下:

9 CMake如何处理子项目

下面我们将展示CMake如何处理子项目。从子目录下打开文件CMakeLists.txt并添加如下代码:

project(subproj)

保存CMakeLists文件后观察Solution Explorer,可以看到两个项目节点,每个项目都有一个声明:

10 冗余目标过滤隐藏

如果一个CMake项目包括其他项目,CMake将会两次展示被包含项目(inner project,内部项目):一次是作为外部项目(including project/outer project)的部分,一次是作为内部项目(included project/inner project)的部分。

这显然很不方便,VisualGDB能够自动隐藏冗余目标实例。可以使用VS settings中的”Hide Redundant Targets” settings来对.vgdbcmake项目进行控制过滤:

如果选择了”HideInnerProjectTargets”,所有的targets作为外部项目来展示(就像没有内嵌的项目一样)。

如果选择了” HideOuterProjectTargets”,VisualGDB将会显示内部项目节点中的所有targets(targets inside the inner project nodes)。

11 构建时进行项目过期检测

和MSBuild项目不同的是,除非你要对项目进行构建(build),否则CMake项目不会自动检测项目是否过期。所以,当你尝试要调试一个项目时,将会弹出提示对该项目进行构建:

如果想改变这种行为,需要打开”Rely on CMake up-to-date Check”,并重新加载该项目:

请注意,上面这种机制并不是一直有效:CMake经常错误地判断一些大型的项目过期了,而实际上它们并没有过期。所有,要使用View->Output->VisualGDB CMake Output面板来观察CMake的诊断输出。

12 包含多目录多目标的CMake项目的构建

如果一个CMake项目在多个目录下包含多个目标(targets),可以选择性的构建选中的目录。在目标节点上右键,然后选择”Build Target”:

注意,如果相同的目录下包含多个targets,这个”Build Target”命令将会build该目录下的所有targets。

13 如何编辑target properties

下面介绍如何编辑目标的properties。选择其中一个target,打开VS Project Properties,并设置Warning Level为Pedantic:

然后观察VisualGDB如何自动将target_compile_options声明添加到对应的CMakeLists文件中:

14 如何为CMake项目设置全局settings

最后介绍如何为VisualGDB CMake项目设置全局的settings。在项目节点上右键选择”VisualGDB Project Properties”:

在VisualGDB Project Properties窗口中,可以配置各种settings,比如Intellisense,static code analysis,debug/deployment settings:

VisualGDB:使用VS创建CMake Linux项目的更多相关文章

  1. VisualGDB系列8:使用VS创建CMake Linux项目

    根据VisualGDB官网(https://visualgdb.com)的帮助文档大致翻译而成.主要是作为个人学习记录.有错误的地方,Robin欢迎大家指正. 本文介绍如何使用VS来创建.构建.调试一 ...

  2. VisualGDB系列9:配置VS直接通过SSH方式访问Linux项目

    根据VisualGDB官网(https://visualgdb.com)的帮助文档大致翻译而成.主要是作为个人学习记录.有错误的地方,Robin欢迎大家指正. 本文介绍如何使用VS和VisualGDB ...

  3. VisualGDB系列6:远程导入Linux项目到VS中

    根据VisualGDB官网(https://visualgdb.com)的帮助文档大致翻译而成.主要是作为个人学习记录.有错误的地方,Robin欢迎大家指正. 本文介绍如何将Linux机器上的Linu ...

  4. Linux下SVN创建新的项目

    Linux下SVN创建新的项目   Linux环境下的SVN创建新的项目 一.前置条件: 1)有安装了linux系统的服务器,123.*.*.29 2)服务器上安装了svn,本人服务器的svn的数据安 ...

  5. VisualGDB系列4:概述-Linux程序与VS

    根据VisualGDB官网(https://visualgdb.com)的帮助文档大致翻译而成.主要是作为个人学习记录.有错误的地方,Robin欢迎大家指正. 本文将会阐述如何使用VisualGDB来 ...

  6. Atitit. 查找linux 项目源码位置

    Atitit. 查找linux 项目源码位置 1. netstat   -anp |grep 801 1.1. 1.3 启动关闭nginx3 1.2. 找到nginx配置文件4 1.3. ./etc/ ...

  7. Linux项目一

    Linux项目一 引言: 这是我去年做的东西,一直没有时间整理,今天又要做一个基于这个项目的客户端与服务器版本. 以前我写的库文件中的函数耦合度很大,在一个函数中调用另一个函数,导致一无法拆开使用! ...

  8. 一步步创建Qt Widget项目+TextFinder案例(摘自笔者2015年将出的《QT5权威指南》,本文为试读篇)

     创建一个基于应用的QtWidget应用程序 这个手册描述了怎样使用QtCreater创建个一个小的Qt应用程序,Text Finder.它是Qt工具Text Finder例子的简写版本.这个应用 ...

  9. CMake 构建项目教程-简介

    CMake 构建项目教程-简介 Linux 平台构建项目,选择了CLion作为C++的IDE,而CLion默认就是使用CMake构建项目,所以这里记录了CMake在构建项目过程的一些小知识. 1. 项 ...

随机推荐

  1. openlayers2地图控件扩展:图例控件LegendControl

    因项目需要在地图中增加图例,以便专题地图查看或输出. 实现思路,折线和多边形图例直接由样式属性创建,多边形直接设置div的样式:折线通过创建svg,设置polyline的样式:点要素的图例比较复杂,目 ...

  2. C语言排序算法之简单交换法排序,直接选择排序,冒泡排序

    C语言排序算法之简单交换法排序,直接选择排序,冒泡排序,最近考试要用到,网上也有很多例子,我觉得还是自己写的看得懂一些. 简单交换法排序 /*简单交换法排序 根据序列中两个记录键值的比较结果来对换这两 ...

  3. TCP_AIO_Server_ZC_01

    ZC: 这个例子是,1个skt 投递 1个未决的接收操作 1.package aio.Client; 1.1.这是一个 测试的客户端的代码: package aio.Client; import ja ...

  4. php变量简单介绍

    1.isset() 判断变量是否存在 ==================================================================== 2.unset()清除变 ...

  5. 报错HTTP Status 500 - The given object has a null identifier: cn.itcast.entity.Customer; nested exception is org.hibernate.TransientObjectException: The given object has a null identifier:

    在使用模型驱动封装的时候,要保证表单中name属性名和类中属性名一致,否则将会报错如下: HTTP Status 500 - The given object has a null identifie ...

  6. MyEclipse安装git插件

    安装egit插件的步骤(安装egit不成功的原因主要是下载的egit版本不适合当前使用的eclipse版本).先检查自己MyEclipse适用egit的版本. 查看自己MyEclipse版本,如下图: ...

  7. 本地动态SQL

    (转自:http://blog.itpub.net/26622598/viewspace-718134) 一.什么是动态SQL 大多数PL/SQL都做着一件特殊的结果可预知的工作.例如,一个存储过程可 ...

  8. shell编程学习2

    1.shell中调用linux命令(1)直接执行(2)反引号括起来执行.有时候我们在shell中调用linux命令是为了得到这个命令的返回值(结果值),这时候就适合用一对反引号(键盘上ESC按键下面的 ...

  9. docker 创建镜像,并推送到私有仓库

    创建镜像 创建  Dockerfile 镜像命名规则:registyr_url / namespace / depart / name : version 用这个规则创建的镜像,可直接推送到私有仓库 ...

  10. 剑指offer--23.合并两个排序的链表

    时间限制:1秒 空间限制:32768K 热度指数:421239 本题知识点: 链表 题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. class ...