Visual Studio 2017 运行、调试使用CMake构建的多可执行程序项目

2023-05-16

 

  在 Windows 环境下,笔者主要通过 Visual Studio 进行较大型项目的查看和运行调试。这里记录下使用 Visual Studio 编译、运行和调试可能包含有多个可执行程序的多文件项目的方法,特别的,这里记录的是使用 CMake 进行自动化构建的多文件项目。 

 

  使用 Visual Studio 打开项目

  目前许多大文件项目使用跨平台自动化构建系统 CMake 进行项目内部依赖关系的管理。简单而言,CMake 使用统一规则的配置文件 CMakeLists.txt 记录项目的依赖关系,再根据目标编译平台生成对应的构建规则,如在 Linux 下可依据 CMakeLists.txt 生成项目对应的 Makefile ,在 Windows 环境下则生成项目的 Visual Studio 工程。

  Windows 环境下首先使用 CMake 生成项目对应的 Visual Studio 工程,通常项目的 README 文件中会有相应的描述。使用 CMake 的一般流程如下所示。

  ( Windows 环境需通过安装包安装 CMake,具体安装见官方文档,Windows 环境下,在项目根目录下 Shift + 右键,在弹出菜单中选择"在此处打开命令窗口",即可直接使用工作目录为项目根目录的命令行窗口)

    mkdir build          //在项目根目录下新建名为 build 的目录
    cd build             //进入 build 目录
    cmake .. -G "Visual Studio 15 2017 Win64"        //在当前目录中(即 build 目录),以 .. (表示 build 的上一目录,即为项目根目录)作为源目录生成 Visual Studio 工程文件

  最后一个命令中,-G 命令可以指定生成的 Visual Studio 工程的 Win64 版本,系统安装的 CMake 支持的 Visual Studio 版本可通过命令行命令 cmake --help 命令查看。

  在上述命令执行完成后,当前 build 目录中即存放有 cmake 生成的项目的 Visual Studio 工程,此时双击目录中的 .sln 文件即自动通过 Visual Studio 打开该项目。

  

  Visual Studio 运行和调试程序

  在打开的 Visual Studio 界面中,主要通过解决方案资源管理器查看项目的文件结构,双击对应的文件从而显示文件的具体内容,通过界面上部的生成、调试等工具栏进行程序的编译、运行和调试工作。

  

  运行可能含有多个可执行程序的项目

  如下图所示,在一个项目的解决方案中,可能存在多个子项目( 源文件、所需资源的集合 ),子项目以某种方式划分,同时存在相互依赖关系。如下图的 decoder 子项目包含有程序的起始调用函数 main 函数,该子项目最终会生成可执行文件( .exe 文件),而 decode 子项目则是生成与 decoder 相关的库文件( .lib 文件),供 decoder 调用。不同子项目的依赖关系等信息是在 CMake 配置中即指定了的。在使用 Visual Studio 进行程序的运行和调试时,需要人为的设置运行/调试时具体使用哪一个子项目(所对应的可执行程序)。具体而言,存在多个子项目可生成可执行程序时,选中需要运行/调试的可执行程序所对应的子项目(main函数所在的子项目),右键 -> 设为启动项目。后续 VS 运行程序时,即启动被设置为启动项的子项目所生成的可执行程序。

  

  

  设置项目属性

  对于每一个子项目,(如果默认设置不满足需求时)可以分别设置它的属性,以满足各自的编译/运行/调试等环境需求。选中某个子项目,右键 -> 属性 (快捷键 Alt + Enter)可以进行该子项目的属性设置。常规的属性窗口如下图所示。简单使用时,主要配置 调试 条目中的命令参数和工作目录,即可满足程序运行的基本要求。其中,命令参数为执行可执行程序时传递给可执行程序的参数,而工作目录指定了在进行相对路径寻址的根目录。另外需要注意,左上角的配置选项中,可以对 Release 和 Debug 进行切换,需要注意 Release 和 Debug 分别拥有自己的属性设置,需要分别进行设置( 非共用 )。不同子项目的配置也需要分别进行指定。 

  完整的 Visual Studio 的属性设置和使用可以参考官方文档  Windows C++项目属性页引用 和 设置编译器和生成属性。

  

   在对可执行程序进行 Debug/Release 属性设置后,可以通过 Visual Studio 界面顶部的按钮切换当前使用的配置,如下图所示中正在使用的即为 Release 版本所设置的属性。

  

  

  项目运行调试

  Visual Studio 可以通过界面顶端的 调试 选项中的条目对项目进行运行/调试。其中,运行/调试启动的可执行程序是被设置为启动项的子项目所生成的可执行程序,生成/调试使用的是顶部工具栏中确定的 Release/Debug 版本所对应的属性。

  这里记录下一些 Visual Studio 中运行和调试的常用操作。

  开始运行和调试

    F5                 //进入调试,或者通过界面上方工具栏的 调试 -> 开始调试 条目
    Ctrl + F5          //直接运行,或者通过工具栏 调试 -> 开始执行 条目,程序运行结束后会保留控制台,而不是立即退出,可以查看程序运行结束后输出至控制台的信息

  调试操作

    F5              //继续运行调试,直至触发下一处断点
    F10             //逐过程运行,如遇到函数时不会步入,而是直接运行至函数返回
    F11             //逐语句运行,如遇到函数时,会进入函数内部,从其第一条语句开始执行

  浏览文件

    Alt + F12             //速览定义,会生成一个小窗口查看对应对象的定义
    F12                   //跳转至对象定义的位置
    Ctrl + F12            //跳转至对象声明的位置
    Shift + F12           //查找所有引用

 

  使用 Visual Studio 的一些问题

  1.关闭某些 warning 的方法

  在 Visual Studio 环境下,会进行较为严格的编译检查,使得编译程序时可能会出现较多数量的警告,在理想状况下,应该修改代码从而消除 warning。当然,用户在某些情况下也可以直接将对应输出的 warning 屏蔽,从而不让其在编译阶段出现( 请注意这样做的风险 )。用户可以在对应文件中加入如下语句,从而关闭该文件中对应编号的 warning。

    #pragma warning( disable : 4101)        //编译时关闭错误编号为 4101 的 warning 

 

  2.LNK1104 无法打开文件“/path/to/xxx.exe”

  在点击 Visual Studio 2017 的运行按钮时,产生上述报错。笔者遇到该问题的情况中,主要由于系统中有一个 "xxx.exe" 进程正在运行中,即对应的可执行文件已经被某个进程占用了,从而使得 Visual Studio 提示找不到文件。用户可以打开控制面板,寻找到 "xxx.exe" 的同名进程,再 右键 -> 结束任务 尝试解决上述问题。若无法直接关闭,可以将任务管理器由 "进程" 切换到 "详细信息" 栏目,找到的对应的进程进行关闭,或者直接重启电脑。

 

  3.打开项目,通过 F5 或 Ctrl + F5 运行/调试程序时,编译过程正常进行,但 VS 报错显示 "无法启动程序xxxxx\ALL_BUILD。系统找不到指定的文件"

  在 VS中, 调试 -> 选项 -> 项目和解决方案 -> 生成并运行 中,默认会选中 "在运行时仅生成启动项目和依赖项",即 VS 运行时只会编译生成被设置为启动项的子项目所对应的可执行程序以及它的依赖项。笔者查看的项目中, encoder 和 decoder 两个子项目是可以生成独立的可执行程序的,但刚使用 VS 打开项目时没有设置它们为启动项目( 刚打开 Visual Studio 时默认启动项为 ALL_BUILD )。所以点击 "本地 Windows 调试器 "或 Ctrl + F5 运行时,VS 会编译和生成 ALL_BUILD 对应的可执行程序以及其所依赖的程序( 在解决方案资源管理器中,ALL_BUILD 子项目本身及其依赖的项,也就是整个项目本身 ) 。但是运行时,系统会认为 ALL_BUILD 是一个可执行文件的名字,从而去尝试启动 ALL_BUILD ,进而出现上述找不到指定 ALL_BUILD 文件的错误。解决方法是选中具体的某个可执行程序对应的子项目,右键 -> 设为启动项目 将其设置为启动项,则 VS 运行时会自动运行设置为启动项的子项目所生成的可执行程序。

 

  参考

  Visual Studio 中的解决方案和项目

  设置编译器和生成属性

  Windows C++项目属性页引用

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Visual Studio 2017 运行、调试使用CMake构建的多可执行程序项目 的相关文章

  • cmake 发现错误的 python 库

    我是 CMake 新手 无法理解一些使用概念 我正在从 C 程序调用 python 脚本 include
  • CMake 链接失败

    我正在为 CMake 配置我的项目 并且遇到链接问题 项目文件全部编译成功 然后它说它正在链接并报告未找到的各种符号 这些符号大部分是由我自己的代码提供的 其中一些是由 BerkeleyDB 提供的 它已被正确定位并包含在内 这是我的顶级
  • 查找带有 Anaconda cmake 前缀的 boost-python3

    DLDR如何将 cmake 指向 boost python3 库 cmake 不会自动检测到它 我正在尝试建立caffe https github com BVLC caffe对于 Python 3 6 使用提供的 cmake 我的系统规格
  • CMake 错误:无法创建命名生成器 Visual Studio 15 2017 Win64-T

    我想建立这个项目 https github com xmrig xmrig https github com xmrig xmrig根据此处的说明 https github com xmrig xmrig wiki Windows Buil
  • Qt5 CMake 将所有库包含到可执行文件中

    我正在尝试使用 Qt 5 14 构建一个发布模式下的应用程序 并且 Qt Creator 内部一切正常 但是当我尝试单独运行可执行文件时 我收到如下错误 OS Windows 10 Qt 5 14 Cmake 3 5 我尝试过的 设置 CM
  • grpc找不到protobuf库

    我检查了 grpc 安装并完成了构建和安装 现在当我尝试 find package gRPC CONFIG REQUIRED I get CMake Error at CMakeLists txt 15 find package Found
  • CXX 编译器标识未知

    我们在使用 Visual Studio 2012 在 Windows 7 64 位下使用 CMake v2 8 12 编译项目时遇到问题 CMake 给我们提供了以下错误 我们已经尝试使用管理员权限从 Visual Studio 命令行启动
  • 为dlib创建共享库

    按照说明使用 cmake 编译 dlib here http dlib net compile html 生成静态 dlib 库 cd examples mkdir build cd build cmake cmake build conf
  • 设置 CMake OBJECT 库的输出目录

    在我的 CMake 文件中 我指定了一个对象库 add library core OBJECT sourcefiles 我在共享库中进一步引用了这组目标文件 add library sharedlib SHARED
  • clang-tidy - 忽略第三方标头代码

    我正在为我的项目使用 CMake 并且我想向项目引入 clang tidy 检查 我用于此目的CMAKE CXX CLANG TIDY and clang tidy用于检查设置的文件 我想在 CI 中使用警告作为错误来可靠地检查提交是否引入
  • 使用已安装的 CMake 而不是 Visual Studio 2017 中嵌入的 CMake

    我有一个 CMake 项目 它使用实际安装的 CMake 版本 3 11 0 rc2 支持的最新版本 Boost 1 66 0 但在之前的版本 3 10 0 中不受支持 如果我从命令行使用 CMake 构建它 一切正常 但如果我在 Visu
  • 如何设置 CMake 与 clang 交叉编译 Windows 上的 ARM 嵌入式系统?

    我正在尝试生成 Ninja makefile 以使用 Clang 为 ARM Cortex A5 CPU 交叉编译 C 项目 我为 CMake 创建了一个工具链文件 但似乎存在错误或缺少一些我无法找到的东西 当使用下面的工具链文件调用 CM
  • 安装 ROS 时 Cmake 未检测到 boost-python

    我一直在尝试在我的 Mac 上安装 ROS 并根据不同版本的 boost 使用不同的库解决了错误 然而 似乎有一个库甚至没有检测到 boost python 这是我得到的错误 CMake Error at usr local share c
  • pybind11:如何将 c++ 和 python 代码打包到一个包中?

    我正在尝试使用 CMake 和 pybind 11 将现有的 Python 代码和新的 C 11 代码打包在一起 我认为我缺少一些可以添加到 CMake 脚本中的简单内容 但在任何地方都找不到它 pybind11 示例只有 C 代码和没有P
  • CMake 中的 FindSDL2 发生了什么?

    我在游戏中使用 SDL2 我一直使用自定义 FindSDL2 cmake 因为标准 CMake 集中没有 然而 前段时间确实出现了有关 FindSDL2 的帖子 例子 红迪网帖子 https www reddit com r opengl
  • CMake Xcode生成器创建了一个无法构建的项目

    我有一个使用 CMake 构建系统的 C 项目 我使用 MacBook Pro 进行开发 因此当我使用终端时 一切都非常顺利 我可以构建我的项目 然而 今天我发现我可以在使用 CMake 生成器创建相应的项目后使用 Xcode gt cma
  • 有关 CMake 错误的问题:没有为目标提供源

    我正在尝试使用 cmake 和 eclipse 将 FreeRtos 添加到我的项目中 但出现错误 我运行的是 debian 10 我的 cmake 版本是 3 13 4 cmake 的文件可以在以下位置找到这个 git 仓库 https
  • 找不到 assimp-vc140-mt.dll ASSIMP

    我已经从以下位置下载了 Assimp 项目http assimp sourceforge net main downloads html http assimp sourceforge net main downloads html Ass
  • 有没有办法在 CMake 配置中禁止“实验性”C++17?

    我在 CMakeLists txt 中设置了以下内容 set CMAKE CXX STANDARD 17 set CMAKE CXX STANDARD REQUIRED ON set CMAKE CXX EXTENSIONS OFF 然而
  • 如何从 CMake 构建目标仅生成目标文件 (*.o)?

    我正在尝试使用 CMake 构建一个对象文件 但我似乎无法让 CMake 构建除完整可执行文件之外的其他内容 我基本上是在寻找以下编译的结果 结果将加载到 VxWorks 目标上并然后链接 CC CFLAGS INC DIRS c src

随机推荐

  • cuda11.2对应的tensorRT版本

    下载tensorRT的官网地址 xff1a https developer nvidia com nvidia tensorrt download 进去之后可以看到各种版本的tensorRT xff0c 但是没有找到只适用于cuda11 2
  • cmake———CXX_STANDARD is set to invalid value ‘17‘

    Q xff1a CXX STANDARD is set to invalid value 39 17 39 A xff1a 版本和cmake版本对不上 xff0c 进入CMakeLists txt xff0c 将set CMAKE CXX
  • 使用DiffusionDet在mot数据集上训练

    数据集处理 在https github com facebookresearch detectron2 detectron2 data datasets builtin py 中 xff0c 可以看到 xff0c detectron2中可以
  • 服务器挂载硬盘

    BuyVM Block Storage xff08 数据盘 xff09 挂载方法 垃圾站 cyhour com fdis l 可以查看硬盘 xff1a 1 找到数据盘之后 xff0c 格式化 mkfs ext4 F dev sdb 2 创建
  • setuptools:‘NoneType‘ object has no attribute ‘split‘

    问题 xff1a 运行 python m pip install e 或者 python setup py build develop 报错 anaconda3 envs querydet lib python3 7 site packag
  • Linux卸载pycharm

    1 确保pycharm程序全部关闭之后 xff0c 进入pycharm的安装目录 xff0c 默认在 opt 2 进入Pycharm的bin目录 xff08 我也不懂为什么 xff0c 或许知道的可以告诉一声 xff09 xff0c 我的是
  • Rust Web入门(一):TCP 和 HTTP Server

    本教程笔记来自 杨旭老师的 rust web 全栈教程 xff0c 链接如下 xff1a https www bilibili com video BV1RP4y1G7KF p 61 1 amp vd source 61 8595fbbf1
  • Rust Web入门(三):连接数据库

    本教程笔记来自 杨旭老师的 rust web 全栈教程 xff0c 链接如下 xff1a https www bilibili com video BV1RP4y1G7KF p 61 1 amp vd source 61 8595fbbf1
  • 如何进入 Windows 的 Ubuntu 子系统

    很久没有用这个 Ubuntu 子系统了 xff0c 最近是因为阿里云到期了 xff0c 又不打算续费 xff0c 所以才重新用起了它 记得原来直接按 Windows 43 R xff0c 输入 ubuntu 回车 xff0c 就能进入这个系
  • Git最新教程4——使用码云Gitee使用教程,创建项目仓库并上传代码

    此git栏目均有学习笔记以及相应的视频 xff0c 视频链接在最后 xff0c 学习笔记完全开源 xff1a https gitee com SiobhanMing Siobhan studyNote 目录 一 注册登录码云 xff0c 完
  • CentOS6.5 安装ntopng-1.2.0

    0 准备工作 安装libpcap xff1a 最好源码安装 yum install y libpcap 安装redis yum install y redis 1 安装 tar zxvf ntopng cd ntopng autogen s
  • Java编程题之四个数字组成不同且无重复的三位数

    题目 有1 2 3 4四个数字 xff0c 能组成多少个互不相同且无重复数字的三位数 xff1f 都是多少 xff1f span class token keyword int span count span class token ope
  • 联想笔记本摄像头被禁用

    联想笔记本摄像头被禁用 针对摄像头 xff08 相机 QQ视频 微信视频 xff09 能够正常打开 xff0c 但是不显示画面 xff0c 如果是找不到摄像头这种问题 xff0c 关了吧 xff0c 找其他的别看这个浪费时间 这种情况可能是
  • Zoom to learn, learn to zoom超分辨网络

    目录 论文主要贡献背景创新点一 SR RAW数据集创新点二 CoBi损失函数结果结论 论文 Zhang X Chen Q Ng R et al Zoom to learn learn to zoom C Proceedings of the
  • 操作系统复习之OS的运行环境

    目录 1 3 1用户态与核心态 1 3 2中断与异常 1 3 3系统调用 例题 1 3 1用户态与核心态 在计算机系统中 xff0c CPU通常运行两种不同性质的程序 一种是操作系统内核程序 另一种是用户自编程序 xff0c 简称用户程序或
  • Docker搭建nextcloud+onlyoffice+ldap+smb协作编辑

    安装docker span class token comment 通过yum源安装docker span sudo yum span class token operator span y install docker span clas
  • 装破解软件后,容易出现hardlock.sys蓝屏警告

    一般遇到这种情况先别着急重装系统 xff0c 先进入安全模式把刚才装的软件卸载 xff0c 包括文件夹删干净 然后可以把别的电脑的hardlock sys文件直接拷贝过来替换掉 xff0c 重启一般就可以
  • windows下C++连接本地MySQL数据库

    IDE选用CLion 这是我数据库里的数据 db1数据库里的user表 首先将本地MySQL的lb文件夹里的libmysql dll和libmysql lib这两个文件复制到cmake build debug文件夹下 xff0c 这两个文件
  • Openstack 知识点概述及基本常用命令

    Openstack OpenStack既是一个社区 xff0c 也是一个项目和一个开源软件 xff0c 提供开放源码软件 xff0c 建立公共和私有云 xff0c 它提供了一个部署云的操作平台或工具集 xff0c 其宗旨在于 xff1a 帮
  • Visual Studio 2017 运行、调试使用CMake构建的多可执行程序项目

    在 Windows 环境下 xff0c 笔者主要通过 Visual Studio 进行较大型项目的查看和运行调试 这里记录下使用 Visual Studio 编译 运行和调试可能包含有多个可执行程序的多文件项目的方法 xff0c 特别的 x