关于在Ubuntu16.04系统下VsCode中配置cmake运行多文件C++的心得
在此之前
本人小白一个,为了配置好这个,向许多大大求教。
预先准备
一般使用 CMake 生成 Makefile 并编译的流程如下:
编写 CMake 配置文件 CMakeLists.txt
执行命令 cmake PATH
使用 make 命令进行编译
VsCode 基本准备
参考这篇博文,详细配置了ubuntu环境下的vscode
https://blog.csdn.net/zzz_xxj/article/details/86568353
应该注意的是,这里我采用cmake进行编译,因此其实无需配置launch.json和task.json,但后续为了可
以再vscode中进行调试,依旧需要编写launch.json,见后文。
Cmake准备
https://blog.csdn.net/daybreak222/article/details/81394363
一个C++工程文件夹的框架结构
众所周知,vscode是通过文件夹进行工程组织的。因此一个文件夹的工程结构最好可以明确下来,方便使用。
.
├── bin
├── build
├── CMakeLists.txt
├── include
│ └── a.h
└── src
└── main.cpp
怎样搭建这样一个结构呢
1、
mkdir PROJECT
创建一个工程根目录,在vscode中打开这个文件夹。
mkdir bin
mkdir build
mkdir include
mkdir src
touch CMakeLists.txt
cd include
touch a.h
cd .. //返回上一级目录,一个点是返回本级目录,两个点是上一级,注意cd和..之间有空格
cd src
touch main.cpp
cd ..
ls //查看一下此时所有目录是否已均建立完成
接下来按照cmake的执行顺序介绍这几个文件夹之间的关系。
include和src文件夹
include是存放.h文件的地方
src是存放.cpp文件的地方
CMakeLists
我自己的 CMakeLists.txt 内容如下:
cmake_minimum_required (VERSION 2.8)
project(PROJECT) #根据自己的工程名修改
#下面的三个set()四选一,一般建议选Clang进行编译,clang --version命令可以查看版本号
set(CMAKE_CXX_COMPILER "clang++-3.8")
#set(CMAKE_CXX_COMPILER "g++")
#set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g")
#set (CMAKE_CXX_FLAGS "-g -fexec-charset=GBK")
# 开启调试信息
set(CMAKE_BUILD_TYPE "Debug")
set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g2 -ggdb")
set(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")
# set(CMAKE_BUILD_TYPE "Release")
# set(CMAKE_CXX_FLAGS_DEBUG "-O0 -Wall -g -ggdb")
#头文件所在的路径包含进去
include_directories(${PROJECT_SOURCE_DIR}/include)
#将src 文件夹下的全部源文件添加到SrcFiles这个集合中
aux_source_directory(./src SrcFiles)
#将可执行文件输出到文件夹bin中
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
#将集合SrcFiles中的全部文件进行add
add_executable(PROJECT ${SrcFiles})
build文件夹
在build文件夹中,执行以下指令
cd build
cmake .. //通过build目录的上一级目录中的CMakeLists.txt 进行cmake
make
执行cmake …后
此时在build文件夹中,应有:
├── build
└── CMakeFiles文件夹
└── 一堆文件
└── CMakeCache.txt
└── cmake_install.cmake
└── Makefile
然后执行make
在bin文件夹中生成可执行文件PROJECT.o
cd bin
./PROJECT
即可运行。
VS Code断点调试CMake工程项目
初始状态
假设我们已经有一个CMake工程项目(比如从github上直接下载并做了一些修改),且我们可以保证能
够编译、运行(换言之,能保证无语法错误,但不能保证无逻辑错误)。
在完成执行
./PROJECT
命令后
此时,我们的目标是,在VS Code中实现设置断点,并在运行时停在此处!
第一步: 修改CMakeLists.txt中相应语句为Debug模式。
这个在我前面给出的CMakeLists.txt 中已经设置完成,即“#开启调试信息”部分。
该步骤亦应通过在终端输入编译、运行指令,检验并确保无误。
第二步: 在VS Code中配置一个launch.json文件
从图中可以看出,分成了三小步:
a. 配置lauch.json,依次点击黄色框中的“小虫子”和“齿轮”,将打开一个lauch.json的模板。而我们只需要修改其中的一行命令:
"program": "${workspaceFolder}/bin/PROJECT // 是可执行文件所在的位置
lauch.json文件完整内容如下
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/bin/PROJECT",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
b. 点击如图位置的build,编译CMake工程项目。第一次可能要选择用哪个编译器,这个是在
CmakeLists.txt里配置的,如果不先点build旁边的cmake,需要选择编译器。用clang比较好。
注意每次改完源代码后都要重新进行build。
点build齿轮之后所有的编译后的东西自动被这个cmake插件放入了build文件夹中,这个文件夹也是
cmake插件自动生成的。用这个插件就无需自己创建build文件夹。
c. 打好断点,按F5运行即可。