⑴ 自用VS Code C++环境配置与CMake最简指南与模板
初学C++时,项目构建让我感到困扰
本科时,我最早使用的C++项目构建工具是make,它的基本概念包括目标、命令和依赖,看起来简单易懂。然而,个人编写makefile时,感觉就像是在写脚本。有一次,一个项目停滞了一两周,我连自己写的Makefile都看不懂了,于是我转向了CMake。尽管CMake也很复杂,但无奈它占据了市场,现代的构建工具也只能用它。
(小贴士:在WSL2下,如果docker容器使用C++插件进行智能提示,在WSL2下安装clangd后,可能会导致容器下的插件不起作用)
在Linux终端中安装clangd和lldb,然后在VS Code中安装clangd和CodeLLDB插件。
clangd代码检查需要依赖一个compile_command.json文件,这个文件可以使用cmake生成,如果项目使用make构建,也可以使用bear进行生成。接下来将分别介绍这两种方法。
需要注意的是,尽管clangd名字中有clang,但它同样支持gcc编译的项目,甚至是交叉编译的项目(我曾将clangd用于risc-v,体验良好)。
CMake生成compile_command.json的方法:在指定构建目录的命令中加入以下选项,就可以生成compile_command.json(如果对CMake不熟悉,后文将介绍个人使用的最简CMake项目模板与使用指南)。
使用bear生成compile_command.json的方法:先安装bear,然后在bear命令后加上你原来准备使用的make命令,就可以在当前目录下看到compile_command.json。
为clangd指定compile_command.json所在路径:在VS Code右下角打开Settings,搜索clangd,在Clangd: Arguments指定compile_command.json路径,由cmake创建的会在构建目录下,由bear创建的会在当前目录下。
总之,clangd就开始工作了。
DEBUG配置:在.vscode文件夹下的launch.json文件是VS Code的debug配置文件,只需要在program栏里写下你的可执行目标文件,然后按F5就可以打断点开始调试了。
CMake最简指南与个人用模板:CMake和C++这两个工具都很强大,但作为项目管理工具,大多数人花太多时间在CMake上并不值得。个人经验教训让我觉得CMake入门只需要懂几个Modern CMake的基本命令和规则,然后拿一个最简单的项目模板抄抄改改就可以了,真要看大项目的CMakeLists.txt再去细看,不要像我一样误入弯路。
首先安装cmake,在VS Code上可以安装一个插件作语法高亮,下面的CMake Tools应该是封装了CMake的一些操作,想要也可以安装,但我自己是不用的。
cmake会根据当前目录下的CMakeLists.txt的内容来执行构建命令。可以查看示例模板的目录结构,根目录和子目录proj下各有一个CMakeLists.txt文件,proj目录存放着当前的实际项目。这种项目结构的好处是之后还可以在根目录下添加与proj平级的项目,proj0,proj1,proj2等等,方便拓展。
根目录下的CMakeLists.txt如下,接下来将按行逐条解释。
cmake_minimum_required(VERSION3.16):这个命令指示编译该项目所需的cmake最小版本号,你可以使用cmake --version查看当前的cmake版本号,然后直接照抄就可以了。
set(CMAKE_BUILD_TYPE Debug):这条命令用于设置项目要不要附带Debug信息进行编译,设置成Release可以不附带Debug信息进行编译。
set(CMAKE_C_COMPILER"/usr/bin/clang"):为CMake设置C编译器clang,如果没有安装clang可以不写。
set(CMAKE_CXX_COMPILER"/usr/bin/clang++"):为CMake设置C++编译器clang++,如果没有安装clang可以不写。
set(CMAKE_CXX_STANDARD 11):这个命令很明显了,设置C++的版本,这里设置为11,可以选择你喜欢的。
set(CMAKE_CXX_STANDARD_REQUIRED ON):常与上一条命令搭配的命令,让cmake检查编译器是否符合要求。
set(CMAKE_EXPORT_COMPILE_COMMANDS ON):这个命令是指示cmake导出compile_command.json文件,还记得吗,就是上文说的用于指导clangd进行智能提示的文件,你要是不需要也可以去掉该语句或者设置为OFF。
project(proj LANGUAGES CXX):这是一个必选命令,指定当前项目名,LANGUAGES后指示该项目使用什么编程语言(注意是复数LANGUAGES而不是LANGUAGE),CXX代表C++。
add_subdirectory(proj):指示proj目录下还有一个文件夹需要cmake进行处理(注意,这里的proj与上一条project()命令的proj无关系)。
接着看向proj目录下的CMakeLists.txt,这里很简单,只有两条有效命令,还有两条被注释了的链接命令随后便讲。
file(GLOB_RECURSE srcs CONFIGURE_DEPENDS src/.cc include/.h):file命令是将指定的文件添加到变量中,这里指定了src目录下的以cc结尾的文件,和include目录下以.h结尾的文件。(注意,cmake查找相对路径是当前CMakeLists.txt所在的路径)GLOB_RECURSE则是指定递归地寻找,也就是不仅会搜索src目录下以cc结尾的文件,src下的任何一级子目录下的cc文件都会被加入srcs变量,include/*.h也是同理。设置CONFIGURE_DEPENDS则会在目录下有新文件加入时,更新变量。
add_executable(proj ${srcs}):add_executable这条命令新增了一个名为proj(与之前出现的proj无关)的target,这个target是一个可执行(executable)文件,它的编译依赖于之前设置的srcs变量。
接下来两条命令则是展示了如何链接库文件,不需要可以注释掉,这里使用了Eigen做示范,如果你的电脑还未安装eigen库,可以运行sudo apt install libeigen3-dev安装eigen。
find_package(Eigen3 3.3 REQUIRED NO_MODULE):find_package命令用于加载外部依赖库,Eigen3 3.3制定了依赖库名和版本,REQUIRED指明必须找到该库,否则报错,NO_MODULE则是让CMake使用配置模式进行查找,默认情况下,CMake在/usr/lib/cmake搜索依赖库对应的*Config.cmake文件,用它来配置链接库选项,我在安装Eigen库后,它就将cmake的配置文件也安装到对应目录里了,因此这里可以使用find_package找到Eigen。
target_link_libraries(proj Eigen3::Eigen):这条命令是非常重要的,它指示了将eigen库链接到了之前设置的target proj上,需要注意的
⑵ vscode 配置 c/c++(markdown)
要充分利用VSCode配置C/C++环境,首先确保已安装了VSCode、mingw64和相关的C/C++插件。为了保持代码结构清晰,建议为cpp和c的示例程序分别创建独立文件夹。
配置过程从创建配置文件开始:通过快捷键Ctrl+Shift+P,选择"C/C++ Configuration (UI)",然后点击"C_cpp_properties.json",进行文件设置。
接着,按下左上角的调试键,选择"GDB" launch配置,根据项目需求调整相关参数,编辑"launch.json"文件以确保调试环境正确。
最后,为了自动化构建过程,点击终端面板,选择"Configure Default Build Task",依据当前代码内容,调整"tasks.json"的构建参数。这样,每次修改代码后,都能自动编译并检查。
完成以上步骤后,就可以开始进行C/C++的开发和调试测试了。