根据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系列8:使用VS创建CMake Linux项目的更多相关文章

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

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

  2. 一、Spring Boot系列:通过Maven创建第一个项目

    1.打开idea选择创建工程 2.创建maven工程,同时选择jdk1.8 注意:不需要勾选其他选项 3.填写项目名称 4.创建好maven项目后,在pom.xml文件中导入Spring Boot需要 ...

  3. VisualGDB系列7:使用VS创建Linux静态库和动态库

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

  4. VisualGDB系列5:使用VS来开发Linux程序

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

  5. VisualGDB系列11:Linux C++项目中使用外部Linux库

    根据VisualGDB官网(https://visualgdb.com)的帮助文档大致翻译而成.主要是作为个人学习记录.有错误的地方,Robin欢迎大家指正. 在<使用VS创建Linux静态库和 ...

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

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

  7. VisualGDB系列2:VisualGDB对Linux平台的支持特性

    根据VisualGDB官网(https://visualgdb.com)的帮助文档大致翻译而成.主要是作为个人学习记录.有错误的地方,Robin欢迎大家指正. 1 复杂问题的直观解决方案 只需要轻点几 ...

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

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

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

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

随机推荐

  1. 医院内外网之间通过网闸交互,通过端口转发加nginx代理实现内网访问外网

    首先介绍下主要需求,很简单,就是要在医院his系统内嵌公司的平台,实现内网直接访问外网 这是院方给我提供的网闸相关配置,105是医院内网的服务器,120是外网的服务器,中间通过网闸配置的几个端口实现互 ...

  2. spring boot 打包

    打成jar直接运行比较简单,这里特别说明的是打成war包,部署在外部的tomcat方式: 1.修改启动代码 import org.springframework.boot.SpringApplicat ...

  3. java基础(6)-集合类2

    泛型 泛型:是一种把类型明确的工作推迟到创建对象或者调用方法的时候才去明确的特殊的类型,参数化类型,把类型当做参数一样的传递 好处: 1)把运行时期的问题提前到了编译器期间 2)避免了强制类型转换 3 ...

  4. lnmp安装exif扩展

    lnmp安装exif扩展 1.找到位置 cd /usr/local/lnmp1.4-full/src 2.解压php sudo bzip2 -d php-5.6.31.tar.bz2 sudo tar ...

  5. Hadoop- Namenode经常挂掉 IPC's epoch 9 is less than the last promised epoch 10

    如题出现Namenode经常挂掉 IPC's epoch 9 is less than the last promised epoch 10, 2019-01-03 05:36:14,774 INFO ...

  6. hibernate学习(2)

    1 实体类编写规则 2 hibernate主键生成策略 3实体类操作 (1)crud操作 (2)实体对象状态 4 hibernate的一级缓存 5 hibernate事务操作 (1)事务代码规则写法 ...

  7. java RC4加密解密

    package com.dgut.app.utils; import java.lang.Byte; import java.util.UUID; public class RC4 { public ...

  8. MVC。

    mvc 开启客户端 和 远程验证 <appSettings> <add key="ClientValidationEnabled" value="tru ...

  9. 安装SQL 2008失败 (win7 旗舰版 32位)

    本机系统 win7 32位 旗舰版 机器已经有sql 2005了,2008 不能安装成功,而且无任何错误提示. 那么通过windows install clean up (下载 windows ins ...

  10. os.path.abspath()的作用

    语法 os.path.abspath(path) 作用 返回绝对路径 实例 import os print(os.path.abspath(".")) #当前目录的绝对路径 pri ...