VS Code 编译、调试 C/C++

VS Code 编译、调试 C/C++

VSCode,全称Visual Studio Code(在Visual Studio后边加了一个Code),有时也简称为 VSC,是一个编辑器。

在 VS Code 中构建和运行

TL;DR: VS Code 商店里有 CMake Tools 插件;使用 CMake 生成构建档,再搭配插件,build & run 可以一气呵成。

配套视频:哔哩哔哩 - BV1MM4y1N7qE

VS Code 是一个可以搭配很多插件、因此很好用的代码编辑器;既然是编辑器,那么它本身其实不是为了调试程序而设计的。

不过,编写一些小的程序,甚至小型的工程,使用 IDE 会稍显庞大,一般也可以选择使用 VS Code 编写;写好之后,想顺手在 VS Code 中编译运行的时候,可能会遇到一些问题。

首先,对于单文件或几个文件的小程序,可以在终端中通过命令行进行编译链接和调试;商店中也有 Code Runner 之类的插件也有帮助,但本质上也是替用户在 Shell 中执行命令,二选一的话还是建议自己手动输入命令。

实际上,在商店中安装 C/C++ 插件后,点击Start Debugging / 按F5可以直接进入调试的,断点和变量查看都没有问题,插件直接帮助配置好了lanuch.json等文件

但是当程序需要链接外部库的时候,事情就变得复杂了。

g++ 添加到 Windows 环境变量后,在 cmd 或者 PowerShell 里面都能使用,而这个 MinGW gcc 也能找到 msys2 环境中的系统标头文件路径,以及链接 C++ 标准库文件。因此,仅编译源代码文件,以及编译链接使用 C++ 标准库的程序,是没有问题的。

但是要链接外部库,就要指定库文件路径以及库文件名;直接点击F5是不行了,因为没有指定要链接的库;好在 msys2 也有pkg-config可供使用,调用它可以获取外部库的标头文件路径以及库文件路径,比如有一个show_img.cpp使用了 OpenCV 这个库,理论上,这样写命令便能实现目的:

g++ show_img.cpp -o show_img $(pkg-config --cflags --libs opencv4)

$() 为命令替换符,作用是获取其他命令的输出。

不过可惜的是,在 PowerShell 中输入上述命令,g++ 并不能完成链接操作(没有对应的环境变量);只有在 msys2 的窗口中能够正常使用。索性放弃手动输入命令,转向使用 CMake 进行程序的构建。

关于 CMake 的使用,见另一篇文章。这里只做简单介绍。

要使用 CMake,首先安装 CMake,并把二进制文件添加到环境变量,这样就能在命令行中使用了;然后,需要写CMakeLists.txt,大概像这样:

cmake_minimum_required(VERSION 3.13)
project(opencv_test)
set(CMAKE_CXX_STANDARD 17)

find_package(OpenCV REQUIRED)

add_executable(show_img show_img.cpp)
target_link_libraries(show_img ${OpenCV_LIBS})

虽然成功找到 OpenCV 的安装之后,会写入OpenCV_DIRS变量,但并不需要使用 include_directories(${OpenCV_INCLUDE_DIRS}) 命令。

之后,随便进入某个文件夹(一般还是选择在项目文件夹下新建一个build目录),然后在目录下执行cmake并指定CMakeLists.txt所在的目录,若在 Windows 下想要使用 msys2 的工具链进行构建(使用 msys2 环境下安装的库),还要指定 CMake 生成的构建档的类型,如:

cmake .. -G "MinGW Makefiles"

然后开始构建(默认以 Release 生成;路径需要指定为CMakeCache.txt所在目录,也就是构建目录下):

cmake --build .

之后就会看到生成的show_img可执行文件出现在build目录下。

而 VS Code 商店中是有 CMake Tools 插件的,安装后我们会发现 VS Code 界面上出现了 CMake 相关的选项;选择好构建类型、构建项、启动项之后,只需要点击调试或者运行按钮就可以了。

综上,个人感觉 CMake 是目前最好的解决方案,写一次CMakeLists.txt,到处都可以用。


扩展阅读:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值