C++ VSCode配合CMake进行项目开发的过程:

本文详细介绍了如何利用Visual Studio Code(VSCode)配合CMake进行C++项目开发的步骤,包括设置项目目录、编写CMakeLists.txt文件、外部编译与调试配置。内容涵盖CMake常用指令、launch.json和tasks.json的配置,以及CMake生成可执行文件的过程。通过本指南,开发者可以高效地在VSCode中进行C++项目的构建与调试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

VSCode配合CMake进行项目开发的过程:

VSCode安装三个插件(其他插件按需加载,不是必须):

C/C++  CMake  CMake Tools

1 设置项目目录

头文件一般放在include文件夹中,源文件一般放在src文件夹中

tree . # 查看文件目录
.
├── include
│   ├── 1.h
│   └── 2.h
├── main.cpp
└── src
    ├── 1.cpp
    └── 2.cpp

2 编写CMakeLists.txt

cmake_minimum_required(VERSION 3.0)

project(PROJECT NAME)

# include_directories(include) 和下面效果相同 相对路径

include_directories(${CMAKE_SOURCE_DIR}/include)
# 不会覆盖CMAKE_CXX_FLAGS选项  在后面追加选项-g(等同于Debug选项) -O2
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}  -Wall -std=c++11")

# 生成compile_commands.json文件
# set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
#debug模式  可以进行调试
set(CMAKE_BUILD_TYPE Debug)

add_executable(myexe main.cpp src/1.cpp src/2.cpp)

另一种写法:(多目录示例)

.
├── include
│   ├── 1.h
│   └── 2.h
├── main.cpp
└── src
    ├── 1.cpp
    └── 2.cpp

src文件夹中中写一个CMakeLists.txt

#将当前文件夹下的源文件全部定义为 SRC变量
aux_source_directory(. SRC)
#通过变量生成共享动态库
add_library(src SHARED ${SRC})

主目录下的CMakeLists.txt

cmake_minimum_required(VERSION 3.0)
project(SOLIDFIRE)
include_directories(include)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}  -Wall -std=c++11")
set(CMAKE_BUILD_TYPE Debug)
#添加子目录 此时子目录中一定要有一个CMakeLists.txt
add_subdirectory(src)
#将当前文件夹下的源文件全部定义为 SRC变量
aux_source_directory(. SRC)
#通过变量构建可执行文件
add_executable(main ${SRC})
#链接共享库(子目录中生成的共享库) 这一命令不能和上一命令调换顺序 否则会报错找不到可执行文件
target_link_libraries(main src)

CMake重要指令

cmake_minimum_required(VERSION 2.8.3)
project(HELLOWORLD)
#set - 显式的定义变量 定义SRC变量,其值为sayhello.cpp hello.cpp
set(SRC sayhello.cpp hello.cpp)
#include_directories - 向工程添加多个特定的头文件搜索路径  相对路径与绝对路径均可以
include_directories(/usr/include/myincludefolder ./include)
#link_directories - 向工程添加多个特定的库文件搜索路径
link_directories(/usr/lib/mylibfolder ./lib)
#add_library - 生成库文件 通过变量 SRC(上面定义过的变量) 生成 libhello.so 共享库 [SHARED|STATIC|MODULE]
add_library(hello SHARED ${SRC})
#add_compile_options - 添加编译参数
obing
# 添加编译参数 -Wall -std=c++11 -O2
add_compile_options(-Wall -std=c++11 -O2)
#add_executable - 生成可执行文件
# 编译main.cpp生成可执行文件main
add_executable(main main.cpp)
#target_link_libraries - 为 target 添加需要链接的共享库
# 将hello动态库文件链接到可执行文件main
target_link_libraries(main hello)
#add_subdirectory - 向当前工程添加存放源文件的子目录
# 添加src子目录,src中需有一个CMakeLists.txt
add_subdirectory(src)
#aux_source_directory - 发现一个目录下所有的源代码文件并将列表存储在一个变量中,这个指令临时被用来自动构建源文件列表
# 定义SRC变量,其值为当前目录下所有的源代码文件
aux_source_directory(. SRC)
# 编译SRC变量所代表的源代码文件,生成main可执行文件
add_executable(main ${SRC})

CMake常用变量:

#CMAKE_CXX_FLAGS g++编译选项
# 在CMAKE_CXX_FLAGS编译选项后追加-std=c++11
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
#CMAKE_BUILD_TYPE 编译类型(Debug, Release)
# 设定编译类型为debug,调试时需要选择debug
set(CMAKE_BUILD_TYPE Debug)
# 设定编译类型为release,发布时需要选择release
set(CMAKE_BUILD_TYPE Release)

3外部编译 手动构建CMake项目

mkdir build
cd build
cmake ..
make

build文件夹中生成可执行文件myexe

4配置launch.json项目并调试

VSCode底层是采用g++GDB调试器进行调试的

点击运行和调试按钮,选择环境C++(GDB/LLDB)g++生成和调试文件,生成launch.json文件,修改:

// 可执行文件路径
"program": "${workspaceFolder}/build/myexe",
// 项目路径
"cwd": "${workspaceFolder}",

在程序上打断点,即可按F5进行调试.

此时需要注意的是:需要修改launch.json文件,另外CMakeLists.txt中一定要添加Debug模式,才可进行调试.

5 自动编译并调试 配置tasks.json文件

如果.vscode文件夹中没有的话,可以在选项栏选择终端->配置默认生成任务中添加.(随便选择一个就好)

// 自动化命令 
// cd 当前工程目录/build   cmake ..  make
{
    "version": "2.0.0",
    "options": {
        "cwd": "${workspaceFolder}/build"
    },
    "tasks": [
        {
            "type": "shell",
            "label": "cmake",
            "command": "cmake",
            "args": [
                ".."
            ]
        },
        {
            "label": "make",
            "group": "build",
            "command": "make",
            "args": [],
            "problemMatcher": []
        },
        {
            "label": "Build",
            "dependsOrder": "sequence",
            "dependsOn": [
                "cmake",
                "make"
            ],
            "problemMatcher": [],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ],
}

另外再修改launch.json中的

# 这里的意思就是在运行launch.json之前先执行Build命令
"preLaunchTask": "Build",

此时如果把build文件夹下的所有文件(包括已生成的可执行文件)全部删除,可以打断点再次F5调试,可以看到自动就会执行CMake编译操作,生成了可执行文件.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值