VSCode创建编译CMake工程的一般流程

本文最后更新于:2022年5月29日 上午

这里总结一下在Ubuntu下使用VSCode创建编译一个CMake工程的一般流程,记录一下详细步骤。

Step 1:安装依赖

去VS Code自带的商店下载的插件,快捷键:Ctrl+Shift+X,下载各种依赖包:

  • C/C++
    代码提示和高亮、调试和代码文件关联跳转。
  • C++ intellisense
    自动代码补全;实时错误检查;代码改进建议。
  • CMake
    CMake语法提示和高亮、自动补全。
  • CMake Tools
    结合VSCode IDE使用CMake这个工具,比如生成CMake项目、构建CMake项目等。

Step 2:创建工程目录

  • 建立一个cmake_ws文件夹(作为根目录):

    1
    mkdir cmake_ws
  • 进入cmake_ws文件夹,分别创建include、src和build文件夹,同时创建CMakeLists.txt文件:

    1
    2
    3
    4
    5
    cd cmake_ws
    mkdir include
    mkdir src
    mkdir build
    touch CMakeLists.txt
  • 建立完成后,结构如下图所示:
    6V7l11.png
    其中,include文件夹用于存放各种头文件,src文件夹主要存放各种源代码文件,build文件夹主要存放编译后的文件,CMakeLists.txt文件是编译文件,描述如何编译代码等。

Step 3:编写代码文件

  1. 进入src目录下,分别新建两个cpp文件:useHello.cpp和libHello.cpp,前者为包含main函数的主文件,后者为库文件,它们的文件内容如下。

    • useHello.cpp

      1
      2
      3
      4
      5
      6
      7
      #include "libHello.h"
      // 使用 libHello.h 中的 printHello() 函数
      int main( int argc, char** argv )
      {
      printHello();
      return 0;
      }
    • libHello.cpp

      1
      2
      3
      4
      5
      6
      7
      8
      9
      //这是一个库文件
      #include <iostream>
      using namespace std;

      void printHello()
      {
      cout<<"Hello World"<<endl;
      }

  2. 进入test/include路径下,新建一个libHello.h头文件,其内容如下。

    1
    2
    3
    4
    5
    6
    7
    #ifndef LIBHELLO_H_
    #define LIBHELLO_H_
    // 上面的宏定义是为了防止重复引用这个头文件而引起的重定义错误

    void printHello();

    #endif

Step 4:编写CMakeLists.txt

例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 声明要求的 cmake 最低版本
cmake_minimum_required(VERSION 2.8)

# 声明一个 cmake 工程
project(Hello)

# 设置编译模式
set(CMAKE_BUILD_TYPE "Debug")
#set(CMAKE_CXX_FLAGS_DEBUG "-O0 -Wall -g -ggdb")

# 添加头文件路径
include_directories( "include" )

# 添加一个库
add_library( hello src/libHello.cpp )
# 共享库
add_library( hello_shared SHARED src/libHello.cpp )

# 添加一个可执行程序
# 语法:add_executable( 程序名 源代码文件 )
add_executable(useHello src/useHello.cpp)

# 将库文件链接到可执行程序上
target_link_libraries( useHello hello_shared )

Step 5:各种json文件配置

在工作文件夹下面新建文件夹”.vscode”,然后在”.vscode”下面新建下面2个json文件并保存。

  • 按F5,生成launch.json,修改为下面内容:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    {
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
    {
    "name": "(gdb) Launch",
    "type": "cppdbg",
    "request": "launch",
    "program": "${workspaceFolder}/build/useHello", //useHello-在CMakeLists.txt文件里配置编译后生成的可执行程序名称
    "args": [], //输入程序运行参数
    "stopAtEntry": false,
    "cwd": "${workspaceFolder}/build", //设置程序运行初始路径
    "environment": [],
    "externalConsole": true, //true-在外部终端运行程序;false-在软件内部终端运行程序
    "MIMode": "gdb",
    "setupCommands": [
    {
    "description": "Enable pretty-printing for gdb",
    "text": "-enable-pretty-printing",
    "ignoreFailures": true
    }
    ]
    }
    ]
    }
  • Ctrl+Shift+B→生成tasks.json,修改为下面内容:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    {
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
    {
    "label": "make build",
    "type": "shell",
    "command": "cd ./build ;cmake ../ ;make", //编译命令
    "group": {
    "kind": "build",
    "isDefault": true
    }
    },
    {
    "label": "clean",
    "type": "shell",
    "command": "make clean",
    }
    ]
    }

Step 6:执行

  • Ctrl+Shift+B 编译程序

    6V716x.png

  • F5 执行程序

    6V7QpR.png

Step 7:调试

在CMakeLists.txt文件中添加下面内容,即可通过断点进行调试。:

1
2
set(CMAKE_BUILD_TYPE "Debug")
set(CMAKE_CXX_FLAGS_DEBUG "-O0 -Wall -g -ggdb")

参考链接

【1】https://www.icode9.com/content-3-518162.html

【2】https://blog.csdn.net/yinwenbin0805/article/details/103945958#t3


VSCode创建编译CMake工程的一般流程
https://kevinloongc.github.io/posts/dfff96f9.html
作者
Kevin Loongc
发布于
2021年3月4日
许可协议