Xmake实战---xmake 与 vscode 集成环境使用

xmake-vscode 插件介绍

我们之前的所有实验,都是使用 xmake 的命令行程序在终端下操作完成的,这对于一些初学者来说还是有不少门槛的,并且操作起来也不能够像其它 IDE 等带有可视化界面的开发环境那样顺手,尤其是代码的编辑、编译和断点调试都需要不停的切换各种终端、编辑器环境才能完成。

为了方便我们的日常开发,xmake 官方提供了可以快速无缝集成到 Visual Studio Code 编辑器的 xmake-vscode 插件,使用这个插件我们可以通过 vscode 编辑器环境来一站式进行 C/C++ 程序开发,内置 xmake 编译、断点调试、编译错误分析定位、编译配置的快速切换等各种实用功能。

而 Visual Studio Code 编辑器是微软推出的一款轻量级跨平台的编辑器,具有非常好的跨平台性、可扩展性,我们在实验环境的桌面上,就能找到带有 Visual Studio Code 字样的图标,双击运行就可以打开它。

安装 xmake-vscode 插件

首先在环境中安装 xmake,执行如下命令:

bash <(curl -kfsSL https://labfile.oss.aliyuncs.com/courses/2764/shget.text) v2.3.7
source ~/.xmake/profile
# 检查版本,验证安装成功
xmake --version

在使用 xmake-vscode 插件之前,我们需要安装它,安装过程很简单,只需要切换到 vscode 的插件扩展 tab 页,然后输入 xmake 搜索相关插件。

如果看到下图所示内容,说明我们已经成功找到了 xmake-vscode 插件,然后点击旁边的 Install 字样按钮就可以完成安装了。

 

创建和打开 C/C++ 工程

插件安装完成后,我们可以先来创建一个空的 C 工程,之前介绍过可以使用 xmake create 命令来创建工程。但是这里我们打算直接使用 xmake-vscode 插件提供的工程创建功能来完成 C/C++ 工程的创建。

在创建之前,需要先准备一个空目录用来存放工程文件,例如将工程放置在 ~/Code/vscode_test 目录下,如果还不存在此目录,可以先手动创建下。

然后,我们直接在 vscode 里面打开这个空目录,只需要通过点击下图红框位置的按钮。

点击后,我们进入刚刚创建的 vscode_test 目录,选中并打开它。

 

打开目录后,我们就可以开始创建工程文件了,继续进入菜单的 view 子菜单打开 vscode 里面的命令面板,如下图。

 

命令面板打开后,我们输入 xmake 字符串,就会看到一系列跟 xmake 插件相关的命令,然后从其中找到带 Create Project 字样的命令,如图。

 

这个时候,由于当前还没有 xmake.lua 文件,会在底下弹出一个提示框,继续点击里面的蓝色按钮。

 

接着就会弹出编程语言的选择列表,这里选择第二项,也就是 C++ 语言。

 

选择完语言后,还会提示选择工程类型,这里选择 console 终端程序类型。

 

选择完成后,整个项目就创建好了,下图左边就是新创建的工程文件,根目录下有 xmake.lua,而图最底下的工具栏就是 xmake 插件的操作面板了,我们的大部分操作都可以通过这个面板快速完成,包括:编译、运行、调试以及配置切换等等。

工具栏面板介绍

创建完成工程后,我们会看到 vscode 底部工具链出现了一排跟 xmake 相关的操作面板,xmake 的大部分操作都可以通过这个面板上的工具按钮来快速完成,如下图。

 

另外,不仅仅是创建工程,如果安装 xmake-vscode 插件后,使用 vscode 打开一个带有 xmake.lua 文件的 C/C++ 工程根目录,那么 vscode 底部的 xmake 工具栏面板也会被自动激活。

通过上图,我们大概能知道每个按钮的具体功能,具体更进一步的使用方式,我们会接下来会挨个讲解。

编译 C/C++ 程序

刚刚我们通过 vscode 创建的一个 C++ 项目工程,其内部就是执行了 xmake 的 xmake create vscode_test 命令来完成的,整个工程文件结构如下。

.
├── src
│   └── main.cpp
└── xmake.lua

在编译之前,先调整下生成的 xmake.lua 文件,修改成如下配置。

add_rules("mode.debug", "mode.release")

target("test")
    set_kind("binary")
    add_files("src/*.cpp")

其实,也就是将程序目标名改成 test,然后点击 vscode 底下的 xmake 工具栏里面的 Build 按钮,来编译我们新创建的 C++ 工程,编译效果如下图。

 

运行程序

编译完成后就可以尝试运行程序了,还是使用底下的工具栏按钮,点击运行图标,也就是下图红框中的按钮。

 

如果运行成功,就会看到实际的运行输出信息:Hello world!

调试程序

接下来,我们重点讲解如何通过 vscode 配合 xmake-vscode 插件来实现断点调试 C/C++ 程序。

不过在调试前还需要做一些准备工作,由于默认 xmake 采用 release 模式编译的目标程序,是不带调试符号信息的,因此我们需要先将编译模式切换到 debug 调式编译模式去重新编译它,使其带上调试符号信息。

具体如何切换到 debug 模式,可以参考下图的操作,点击底下 release 文本所在的按钮,然后在上面列出的列表中,选择 debug 项即可。

 

完成切换后可以看到底下的 release 按钮已经变成了 debug 字样,然后点击 build 按钮,就可以重新编译带有调试符号的目标程序了。

 

调试版本程序编译完成后,还需要额外做一件事,那就是安装 vscode 的 C/C++ 插件,因为 xmake-vscode 插件的调试功能是基于这个插件的,我们仅仅只需要首次使用时安装它即可。

重新切到插件市场页面,搜索 C/C++,显示出来的第一项就是,点击 Install 安装即可,如下图。

  

安装好 C/C++ 插件,就可以开始调试操作了。首先点击 main.cpp 打开源文件,然后在需要下断点的代码行左侧位置点击下断点,如果出现小红点,说明已经成功下好了调试断点,如下图。

 

断点下好后,就可以点击底下的调试按钮,开启断点调试了,如果一切顺利,程序运行起来后就会命中刚刚设置的断点,如下图。

# 需要先在环境中安装 gdb
sudo apt install -y gdb

 

目标程序切换

接下来再来详细讲解编译,之前我们已经使用过 build 按钮来编译工程,但如果一个项目中存在多个目标程序又不想全部编译,我们就需要指定编译哪个目标程序。

在命令行中,我们可以通过 xmake build test 命令来显示的指定编译哪个目标,而在 vscode 中,xmake 插件也提供了很方便的目标切换操作,来快速切换编译。

首先修改 xmake.lua 文件,新增一个名为 test2 的目标程序,用于之后的目标切换测试,例如。

add_rules("mode.debug", "mode.release")

target("test")
    set_kind("binary")
    add_files("src/*.cpp")

target("test2")
    set_kind("binary")
    add_files("src/*.cpp")

然后点击底下 default 字样的按钮,之后会在顶部显示整个项目所有目标程序名的列表,我们点击其中的 test2 目标程序,就可以完成切换。

如果切换成功,底下的 default 文本就会变成 test2,由于默认编译 xmake 会自动编译所有目标程序,所以最初显示的是 default 文本。

 

这个时候,我们再执行编译,就能看到实际仅仅只编译了我们指定的 test2 目标程序。

 

编译错误信息

如果我们的工程代码没写对导致编译出错,可以直接从编译输出中看到错误信息,例如下图。

 

而 xmake-vscode 插件还会自动解析编译错误输出信息,分类每个编译错误,并可通过双击指定错误,跳转定位到指定的错误代码位置,也就是下图所示位置。

 

查看编译详细信息

在命令行中,我们可以通过 xmake -v 来查看编译过程中的详细命令参数信息,而在 vscode 中同样可以通过配置开启详细输出。

首先打开菜单,点击 File -> Preferences -> Settings 子菜单,如下图。

 

然后在打开的 Setting 配置页面,输入 xmake 找到所有跟 xmake 插件相关的配置项,其中有一项是 BuildLevel,它就是用于设置编译过程中的输出信息级别。

默认是 warnings 级别,仅仅输出编译警告信息以及正常信息,我们把它改为 verbose 级别,就可以输出完整的编译命令行参数了。

 

至于 debug 级别对应的就是 xmake -vD 的诊断信息,还会进一步打印出错的栈信息。

我们这里将配置切换成 verbose 级别后,再重新构建下程序,看看实际的输出是怎样的。不过由于底部只提供了 build 按钮,没有 rebuild 按钮,为了执行重新编译,我们需要从菜单里面的命令面板中,找到 xmake 的 Rebuild 命令,点击执行才行。

从下图的红色箭头位置找到对应的命令面板。

 

然后再打开的命令面板中输入 xmake 过滤出所有跟 xmake 相关的命令列表,找到 Rebuild 命令后点击编译即可,如下图。

 

开启 verbose 级别后,我们就能看到编译输出中完整的命令参数了,如下图。

 

xmake.lua 编辑和自动补全

xmake-vscode 插件还内置了对 xmake.lua 文件编写时的自动提示和补全支持,我们只需要输入 add_set_ 等字样的文本,就会自动列举出与其相关的所有 api 供我们使用,来方便快速配置 xmake.lua。

我们可以通过编辑 xmake.lua 文件对里面 test2 目标程序添加一个 add_defines("TEST2") 来体验下自动补全功能。

最终的完整配置内容如下。

add_rules("mode.debug", "mode.release")

target("test")
    set_kind("binary")
    add_files("src/*.cpp")

target("test2")
    set_kind("binary")
    add_files("src/*.cpp")
    add_defines("TEST2")

而我们输入时的补全特性可以通过下面的图片体会到。

 

完成配置后,我们再来点击底下的 Build 按钮执行编译,看下详细命令输出,应该能够正常看到新加上的 -DTEST2 宏定义了。

 

实验总结

在本节实验中,我们学习了如何在 vscode 中使用 xmake-vscode 插件来编译开发 C/C++ 程序,以及如何进行断点调试,并且学习了 xmake 工具栏和命令面板的使用以及如何进行参数配置。

本实验的参考代码可以使用如下命令下载:

wget https://labfile.oss-internal.aliyuncs.com/courses/2764/code20.zip

简介 XMake 是一个跨平台自动构建工具,支持在各种主流平台上构建项目,类似 cmake、automake、premake,但是更加的方便易用,工程描述语法更简洁直观,支持平台更多,并且集创建、配置、编译、打包、安装、卸载、运行于一体。 支持特性 支持windows、mac、linux、ios、android等平台,自动检测不同平台上的编译工具链(也可手动配置) 编译windows项目采用原生vs的工具链,不需要使用cygwin、mingw(当然这些也支持) 支持自定义平台编译配置,可以很方便的扩展第三方平台支持 采用lua脚本语法描述项目,描述规则简单高效,逻辑规则可灵活修改,并且不会生成相关平台的工程文件,是工程更加简单明了 支持创建模板工程、配置项目、编译项目、运行、打包、安装和卸载等常用功能(后续还会增加:自动生成文档、调试等模块) 支持编译c/c /objc成静态库、动态库、命令行可执行程序(后续还会增加:mac、ios、android的app的生成规则) 提供丰富的工程描述api,使用简单灵活,例如添加编译文件只需(还支持过滤排除): add_files("src/*.c", "src/asm/**.S", "src/*.m") 支持头文件、接口、链接库依赖、类型的自动检测,并可自动生成配置头文件config.h 支持自定义编译配置开关,例如如果在工程描述文件中增加了enable_xxx的开关,那么配置编译的时候就可以手动进行配置来启用它: xmake config --enable_xxx=true 提供一键打包功能,不管在哪个平台上进行打包,都只需要执行一条相同的命令,非常的方便 支持自定义编译工具和规则,例如想要增加对masm/yasm的编译规则,只需将自己写的masm.lua/yasm.lua规则文件,放到当前项目目录下即可。。 支持全局配置,一些常用的项目配置,例如工具链、规则描述等等,都可以进行全局配置,这样就不需要每次编译不同工程,都去配置一遍 除了可以自动检测依赖模块,也支持手动强制配置模块,还有各种编译flags。 简单例子 创建一个c console项目:xmake create -l c  -t 1 console  or xmake create --language=c  --template=1 console 工程描述文件:xmake.luaadd_target("console")     set_kind("binary")     add_files("src/*.c") 配置工程: 这个是可选的步骤,如果只想编译当前主机平台的项目,是可以不用配置的,默认编译release版本。   当然每次配置都会被缓存,不需要每次全部重新配置。xmake f -p iphoneos -m debug or xmake f --ldflags="-Lxxx -lxxx" or xmake f --plat=macosx --arch=x86_64 or xmake config --plat=iphoneos --mode=debug or xmake config --plat=iphonesimulator or xmake config --plat=android --arch=armv7-a --ndk=xxxxx or xmake config --cross=i386-mingw32- --toolchains=/xxx/bin or xmake config --cxflags="-Dxxx -Ixxx" or xmake config --help 编译工程:xmake or xmake -r or xmake --rebuild 运行目标:xmake r console or xmake run console 打包所有:xmake p or xmake p --archs="armv7, arm64" or xmake package or xmake package console or xmake package -o /tmp or xmake package --output=/tmp 安装目标:xmake i or xmake install or xmake install console or xmake install -o /tmp or xmake install --output=/tmp 详细使用方式和参数说明,请参考文档 或者运行:xmake -h or xmake --help or xmake config --help or xmake package --help ... 也可以参考使用xmake的实际项目:TBOX 后续工作 完善打包模块,支持对ios、mac、android的app进行一键打包和签名,生成.ipa、.apk、.app的应用程序文件 完善安装功能,支持对ios、android的app进行安装到设备 实现调试功能 实现自动生成doxygen文档功能 增加一些实用的工程描述api,例如:下载api,可以自动下载缺少的依赖库等等。。 解析automake、cmake的工程,并自动生成xmake的描述文件,实现无缝编译(如果这个实现成功的话,以后移植编译一些开源代码就更方便了) 标签:构建工具
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

红星星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值