VSCode CMake 安装与配置详解

概述

在windows上使用cmake编译C/C++程序时,首先需要CMake,安装gcc/g++编译环境,然后使用VSCode 以及配置下CMakelist.txt。
所需工具:

  1. VSCode (需要安装以下插件)

C/C++
C++ Intellisense
CMake
CMake tools
CMake Tools Helper

  1. CMake
  2. MinGW

安装CMake

下载链接:

https://cmake.org/download/

尽量选择Latest Release版本,比较稳定。
如图中红框所示,下载后缀为.msi的安装文件,然后直接安装。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
安装目录选择默认:C:\Program Files\CMake\

验证安装成功

在命令行 输入如下指令

cmake -version

在这里插入图片描述

安装MinGW

在ubuntu系统上我们可以直接安装gcc/g++,但在windows上无法直接安装g++,这时候就需要用到MinGW啦,MinGW是从Cygwin(1.3.3版)基础上发展而来。GCC支持的语言大多在MinGW也受支持,其中涵盖C、C++、Objective-C、Fortran及Ada。对于C语言之外的语言,MinGW使用标准的GNU运行库,如C++使用GNU libstdc++。
下载链接:

<think>我们将使用Visual Studio Code结合CMake创建一个简单的C++测试项目。这个项目将包含一个可执行文件和一个静态库,并包含单元测试(使用Google Test框架)。以下是详细步骤: ### 步骤1:安装必要工具 1. 安装Visual Studio Code(VSCode) 2. 安装CMake(建议使用3.10以上版本) 3. 安装VSCode扩展: - CMake Tools (ms-vscode.cmake-tools) - C/C++ (ms-vscode.cpptools) - Test Explorer UI (hbenl.vscode-test-explorer) - Google Test Adapter (DavidSchuldenfrei.gtest-adapter) ### 步骤2:创建项目结构 创建以下目录结构: ``` my_project/ ├── CMakeLists.txt ├── include/ │ └── my_lib.h ├── src/ │ ├── my_lib.cpp │ └── main.cpp └── test/ └── test_my_lib.cpp ``` ### 步骤3:编写CMakeLists.txt ```cmake cmake_minimum_required(VERSION 3.10) project(MyProject VERSION 1.0.0 LANGUAGES CXX) # 设置C++标准 set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) # 添加可执行文件 add_executable(${PROJECT_NAME} src/main.cpp src/my_lib.cpp) # 包含目录 target_include_directories(${PROJECT_NAME} PUBLIC include) # 启用测试 enable_testing() # 下载并配置Google Test include(FetchContent) FetchContent_Declare( googletest GIT_REPOSITORY https://github.com/google/googletest.git GIT_TAG release-1.11.0 ) FetchContent_MakeAvailable(googletest) # 添加测试可执行文件 add_executable(test_my_lib test/test_my_lib.cpp src/my_lib.cpp) target_include_directories(test_my_lib PUBLIC include) target_link_libraries(test_my_lib gtest_main) # 添加测试 add_test(NAME MyLibTest COMMAND test_my_lib) ``` ### 步骤4:编写代码文件 `include/my_lib.h`: ```cpp #pragma once int add(int a, int b); ``` `src/my_lib.cpp`: ```cpp #include "my_lib.h" int add(int a, int b) { return a + b; } ``` `src/main.cpp`: ```cpp #include <iostream> #include "my_lib.h" int main() { std::cout << "Hello, World! 2+3=" << add(2, 3) << std::endl; return 0; } ``` `test/test_my_lib.cpp`: ```cpp #include "gtest/gtest.h" #include "my_lib.h" TEST(MyLibTest, AddTest) { EXPECT_EQ(add(2, 3), 5); EXPECT_EQ(add(-1, 1), 0); } int main(int argc, char **argv) { ::testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); } ``` ### 步骤5:在VSCode配置 1. 打开项目文件夹(`my_project`) 2. 按`Ctrl+Shift+P`打开命令面板,输入`CMake: Configure`,选择编译器(如GCC或MSVC) 3. 选择构建类型(Debug/Release) 4. 构建项目:`CMake: Build` 5. 运行主程序:在`main.cpp`中右键选择`Run C/C++ File` 6. 运行测试:打开测试资源管理器(左侧测试图标),运行所有测试 ### 步骤6:配置调试 创建`.vscode/launch.json`: ```json { "version": "0.2.0", "configurations": [ { "name": "g++ - 生成和调试活动文件", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/build/${workspaceFolderBasename}", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": false, "MIMode": "gdb", "setupCommands": [ { "description": "为 gdb 启用整齐打印", "text": "-enable-pretty-printing", "ignoreFailures": true } ], "preLaunchTask": "cmake: build", "miDebuggerPath": "/usr/bin/gdb" }, { "name": "(Windows) 启动", "type": "cppvsdbg", "request": "launch", "program": "${workspaceFolder}/build/Debug/${workspaceFolderBasename}.exe", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "console": "integratedTerminal", "preLaunchTask": "cmake: build" } ] } ``` ### 步骤7:配置任务(可选) 创建`.vscode/tasks.json`: ```json { "version": "2.0.0", "tasks": [ { "label": "cmake: build", "type": "shell", "command": "cmake --build build", "group": "build", "problemMatcher": [] } ] } ``` ### 常见问题解决 1. **CMake无法找到编译器**: - 确保已安装编译器(GCC/MSVC) - 在VSCode中按`Ctrl+Shift+P`运行`CMake: Scan for Kits` - 运行`CMake: Select a Kit`选择编译器 2. **Google Test下载失败**: - 检查网络连接 - 手动下载googletest并放在项目目录下,修改CMakeLists.txt: ```cmake add_subdirectory(googletest) ``` 3. **测试资源管理器未显示测试**: - 确保已安装Google Test Adapter扩展 - 在设置中启用测试:`"gtest-adapter.debugConfig": [ "config1", "config2" ]` ### 项目结构说明 - `include/`:公共头文件 - `src/`:源文件和主程序 - `test/`:单元测试 - `build/`:构建目录(由CMake生成) ### 完整工作流程 1. 编写代码 2. 配置CMake(选择工具链和构建类型) 3. 构建项目 4. 运行/调试程序 5. 编写并运行测试 --- §§相关问题§§: 1. 如何在CMake项目中添加第三方库依赖(如Boost)? 2. 如何使用VSCode调试CMake项目中的单元测试? 3. 如何配置CMake以支持交叉编译? 4. 在CMake项目中如何管理多个可执行文件和库?</think>### 使用 VSCodeCMake 创建 C++ 测试项目 #### 完整项目结构 ``` my_project/ ├── .vscode/ │ ├── settings.json │ ├── tasks.json │ └── launch.json ├── CMakeLists.txt ├── include/ │ └── math_utils.h ├── src/ │ ├── main.cpp │ └── math_utils.cpp ├── test/ │ ├── test_math.cpp │ └── CMakeLists.txt └── build/ (自动生成) ``` #### 核心文件实现 1. **根目录 CMakeLists.txt**: ```cmake cmake_minimum_required(VERSION 3.15) project(MyProject VERSION 1.0.0) # 设置C++标准 set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) # 添加可执行文件 add_subdirectory(src) # 添加测试(如果启用测试) option(ENABLE_TESTS "Enable tests" ON) if(ENABLE_TESTS) enable_testing() add_subdirectory(test) endif() ``` 2. **src/CMakeLists.txt**: ```cmake # 创建主可执行文件 add_executable(${PROJECT_NAME} main.cpp math_utils.cpp ) # 包含目录 target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../include ) # 安装规则(可选) install(TARGETS ${PROJECT_NAME} DESTINATION bin) ``` 3. **test/CMakeLists.txt**: ```cmake # 添加GoogleTest框架 include(FetchContent) FetchContent_Declare( googletest GIT_REPOSITORY https://github.com/google/googletest.git GIT_TAG release-1.11.0 ) FetchContent_MakeAvailable(googletest) # 创建测试可执行文件 add_executable(test_math test_math.cpp) target_link_libraries(test_math gtest_main ${PROJECT_NAME} # 链接主项目 ) # 添加测试用例 add_test(NAME MathTests COMMAND test_math) ``` 4. **include/math_utils.h**: ```cpp #pragma once int add(int a, int b); int multiply(int a, int b); ``` 5. **src/math_utils.cpp**: ```cpp #include "math_utils.h" int add(int a, int b) { return a + b; } int multiply(int a, int b) { return a * b; } ``` 6. **src/main.cpp**: ```cpp #include <iostream> #include "math_utils.h" int main() { std::cout << "2 + 3 = " << add(2, 3) << std::endl; std::cout << "2 * 3 = " << multiply(2, 3) << std::endl; return 0; } ``` 7. **test/test_math.cpp**: ```cpp #include "gtest/gtest.h" #include "math_utils.h" TEST(MathTest, Addition) { EXPECT_EQ(add(2, 3), 5); EXPECT_EQ(add(-1, 1), 0); } TEST(MathTest, Multiplication) { EXPECT_EQ(multiply(2, 3), 6); EXPECT_EQ(multiply(-2, 3), -6); } ``` #### VSCode 配置文件 1. **.vscode/settings.json**: ```json { "cmake.configureOnOpen": true, "cmake.buildDirectory": "${workspaceFolder}/build", "cmake.generator": "Ninja", "cmake.buildBeforeRun": true, "C_Cpp.default.configurationProvider": "ms-vscode.cmake-tools", "testExplorer.useNativeTesting": true } ``` 2. **.vscode/tasks.json**: ```json { "version": "2.0.0", "tasks": [ { "label": "cmake", "type": "shell", "command": "cmake", "args": [ "-S", ".", "-B", "${workspaceFolder}/build", "-DCMAKE_BUILD_TYPE=Debug" ], "group": "build", "problemMatcher": [] }, { "label": "build", "type": "shell", "command": "cmake", "args": [ "--build", "${workspaceFolder}/build" ], "group": "build", "problemMatcher": [] }, { "label": "run-tests", "type": "shell", "command": "ctest", "args": [ "--test-dir", "${workspaceFolder}/build/test" ], "dependsOn": ["build"] } ] } ``` 3. **.vscode/launch.json** (调试配置): ```json { "version": "0.2.0", "configurations": [ { "name": "C++ Debug", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/build/src/MyProject", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": false, "MIMode": "gdb", "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true } ], "preLaunchTask": "build" }, { "name": "Debug Tests", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/build/test/test_math", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": false, "MIMode": "gdb" } ] } ``` #### 工作流程说明 1. **项目初始化**: ```bash mkdir my_project cd my_project code . # 在VSCode中打开 ``` 2. **构建项目**: - 按 `Ctrl+Shift+P` 打开命令面板 - 输入 `CMake: Configure` 配置项目 - 输入 `CMake: Build` 构建项目 3. **运行程序**: - 在 `main.cpp` 中按 `F5` 调试运行 - 或在终端执行: `./build/src/MyProject` 4. **运行测试**: - 安装 `Test Explorer UI` 扩展 - 在测试资源管理器中运行测试 - 或执行: `cd build && ctest` 5. **调试测试**: - 在 `test_math.cpp` 的测试用例中设置断点 - 选择 `Debug Tests` 配置按 `F5` 启动调试 #### 高级配置技巧 1. **多配置构建**: ```cmake # 在根CMakeLists.txt中添加 set(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "" FORCE) ``` 2. **代码格式化集成**: ```json // .vscode/settings.json { "editor.formatOnSave": true, "C_Cpp.clang_format_fallbackStyle": "Google", "cmake.formatting.provider": "clangFormat" } ``` 3. **代码分析配置**: ```json { "C_Cpp.errorSquiggles": "Enabled", "C_Cpp.intelliSenseEngine": "Default", "clangd.path": "/usr/bin/clangd", "clangd.arguments": ["--background-index"] } ``` 4. **Doxygen文档支持**: ```cmake # 在CMakeLists.txt中添加 find_package(Doxygen) if(DOXYGEN_FOUND) set(DOXYGEN_OUTPUT_DIR ${CMAKE_BINARY_DIR}/docs) doxygen_add_docs(docs ${PROJECT_SOURCE_DIR}/include COMMENT "Generate documentation" ) endif() ``` #### 常见问题解决 1. **CMake找不到编译器**: - 安装构建工具链: `sudo apt install build-essential` (Linux) - 安装VS Build Tools (Windows) - 在VSCode中运行 `CMake: Scan for Kits` 2. **Google Test下载失败**: ```cmake # 修改test/CMakeLists.txt使用本地路径 set(GTEST_ROOT path/to/local/googletest) find_package(GTest REQUIRED) ``` 3. **调试器无法启动**: - 确保已安装gdb: `sudo apt install gdb` (Linux) - Windows安装MinGW-w64或使用MSVC调试器 - 检查 `launch.json` 中的 `MIMode` 设置 4. **IntelliSense不工作**: - 运行命令: `CMake: Delete Cache and Reconfigure` - 检查 `C_Cpp.default.compilerPath` 设置 - 确保安装了C/C++扩展 --- ### 完整开发流程 ```mermaid graph LR A[创建项目结构] --> B[编写CMakeLists.txt] B --> C[配置VSCode] C --> D[编写代码] D --> E[构建项目] E --> F[运行/调试] F --> G[编写测试] G --> H[运行测试] H --> I[重构优化] ```
评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值