Ubuntu 环境下 VS code + vcpkg +CMake 搭建开发环境

提前须知:若要只配置 VScode 中的 C/C++ 编译环境,无须安装 git,cmake

一、 VScode 安装

  1. VScode 官网 下载 .deb 压缩包

  2. 在下载文件夹中打开终端,运行,记得修改压缩包的正确名字

    sudo  dpkg  -i code_1.45.1-1589445302_amd64.deb
    
  3. 如果只需要配置 C/C++ 编译环境,跳转到 五、

二、必要组件的安装

  1. 一般情况下,ubuntu 会自动安装 gccg++,可以通过命令来查看是否安装。

    g++ --version	//查看g++版本
    gcc --version	//查看gcc版本
    gdb --version	//查看gdb版本
    
  2. 如果未安装,通过命令来进行安装,如果不确定,可以统一重新全部安装一次。

    sudo apt update
    sudo apt install build-essential  # 包含 g++、gcc、make 等工具
    sudo apt install gcc
    sudo apt install g++
    sudo apt install gdb  # 调试工具(可选,但建议安装)
    

二、git安装

sudo apt-get update                     //更新
sudo apt-get install git                //自动安装git
git --version                           //确认git版本

三、Cmake 安装

  1. 安装编译所需的依赖包:

    sudo apt update
    sudo apt install build-essential libssl-dev
    
  2. 下载 CMake 的源代码。访问 CMake官网 下载指定版本的源码压缩包。

    wget https://cmake.org/files/v3.20/cmake-3.20.0.tar.gz
    
  3. 在下载文件夹下打开终端,解压源代码包,并进入解压后的目录。

    tar -zxvf cmake-3.20.0.tar.gz
    cd cmake-3.20.0
    
  4. 编译和安装:

    ./configure
    make
    sudo make install
    

    在运行 ./configure 的时候出现错误,可能是缺少 OpenSSL 依赖。运行命令,之后重新运行 ./configure

    sudo apt install libssl-dev
    
  5. 验证安装

    cmake --version
    

四、 vcpkg 安装

  1. 打开终端,更新软件包列表,并且更新全部软件

    sudo apt update
    sudo apt upgrade
    
  2. 克隆 vcpkg 仓库,在主目录下打开终端,运行

    git clone https://github.com/microsoft/vcpkg.git
    
  3. 编译 vcpkg 的可执行文件,在 vcpkg 目录下打开终端,运行,注意此处需要连接 github 因此需要 vpn

    ./bootstrap-vcpkg.sh
    
    #若执行失败,安装需要的依赖
    sudo apt-get install curl zip unzip tar
    
  4. 集成到全局环境,打开终端,运行。

    nano ~/.bashrc
    
  5. 在文件最末尾添加如下内容,可以在 vcpkg 文件夹下打开终端输入 pwd 查看路径。

    # 添加 vcpkg 到 PATH
    export VCPKG_ROOT=/home/你的用户名/vcpkg
    export PATH=$VCPKG_ROOT:$PATH		#若出现报红,可以将 = 后面的内容用双引号 "" 括起来
    
  6. 保存并关闭文件 (按 Ctrl+X, 然后 Y, 然后 Enter)。然后运行以下命令。

    source ~/.bashrc
    
  7. 查看 vcpkg 版本

    vcpkg version
    
  8. 在 VScode 中使用 vcpkg 安装的包,直接编辑 c_cpp_properties.json 文件中的 "includePath",在参数列表中添加 "/home/your-username/vcpkg/installed/x64-linux/include"

  9. 卸载 vcpkg,在主目录下打开终端,运行以下命令。

    rm -rf ~/vcpkg
    
  10. 使用 vcpkg 安装包,在 vcpkg 目录下打开终端,运行以下指令。

    # 安装所需库,例如drogon (动态库,通常是默认的)
    ./vcpkg install drogon     # 注意./后面无空格
    
    #查看库是否已经成功安装
    ./vcpkg list
    

五、环境搭建

  1. 首先需要在 VScode 中下载插件:C/C++、C/C++ Extension Pack、C/C++Themes、CMake、CMake Tools、CMake Language Support
    在这里插入图片描述

  2. 创建一个目录用于存放以后所编写的代码,例如 C++ project,在此目录下创建一个 .vscode 文件夹,并在 .vscode 文件夹下创建五个 json 文件。

    • c_cpp_properties.json

      {
          "configurations": [
              {
                  "name": "Linux",
                  "includePath": [
                      "${workspaceFolder}/**",
                      "/home/amireux/vcpkg/installed/x64-linux/include",
                      "/usr/include",
                      "/usr/local/include"
                  ],
                  "defines": [],
                  "compilerPath": "/usr/bin/gcc",
                  "cStandard": "c17",
                  "cppStandard": "c++17",
                  "intelliSenseMode": "gcc-x64"
              }
          ],
          "version": 4
      }
      
    • launch.json

      {
      	    "version": "0.2.0",
      	    "configurations": [
      	        {
      	            "name": "(gdb) Launch",
      	            "type": "cppdbg",
      	            "request": "launch",
      	            "program": "${workspaceFolder}/build/${workspaceFolderBasename}",
      	            "args": [],
      	            "stopAtEntry": false,
      	            "cwd": "${workspaceFolder}",
      	            "environment": [],
      	            "externalConsole": false,
      	            "MIMode": "gdb",
      	            "setupCommands": [
      	                {
      	                    "description": "Enable pretty-printing for gdb",
      	                    "text": "-enable-pretty-printing",
      	                    "ignoreFailures": true
      	                }
      	            ],
      	            "preLaunchTask": "cmake-build",
      	            "miDebuggerPath": "/usr/bin/gdb"
      	        }
      	    ]
      	}
      
    • tasks.json

      {
          "version": "2.0.0",
          "tasks": [
              {
                  "label": "cmake-build",
                  "type": "shell",
                  "command": "cmake",
                  "args": [
                      "--build",
                      "${workspaceFolder}/build",
                      "--config",
                      "Debug"
                  ],
                  "group": {
                      "kind": "build",
                      "isDefault": true
                  },
                  "problemMatcher": [
                      "$gcc"
                  ],
                  "dependsOn": "cmake-configure"
              },
              {
                  "label": "cmake-configure",
                  "type": "shell",
                  "command": "cmake",
                  "args": [
                      "-S",
                      "${workspaceFolder}",
                      "-B",
                      "${workspaceFolder}/build",
                      "-G",
                      "Ninja",
                      "-DCMAKE_BUILD_TYPE=Debug"
                  ],
                  "group": "build",
                  "problemMatcher": []
              },
              {
                  "label": "clean-build",
                  "type": "shell",
                  "command": "rm",
                  "args": [
                      "-rf",
                      "${workspaceFolder}/build"
                  ],
                  "group": "build"
              },
              {
                  "type": "cppbuild",
                  "label": "C/C++: gcc 生成活动文件",
                  "command": "/usr/bin/g++",
                  "args": [
                      "-fdiagnostics-color=always",
                      "-g",
                      "${file}",
                      "-o",
                      "${fileDirname}/${fileBasenameNoExtension}"
                  ],
                  "options": {
                      "cwd": "${fileDirname}"
                  },
                  "problemMatcher": [
                      "$gcc"
                  ],
                  "group": "build",
                  "detail": "调试器生成的任务。"
              },
              {
                  "type": "cmake",
                  "label": "CMake: clean rebuild",
                  "command": "cleanRebuild",
                  "targets": [
                      "all"
                  ],
                  "group": "build",
                  "problemMatcher": [],
                  "detail": "CMake template clean rebuild task"
              }
          ]
      }
      
    • CMakePresets.jsonCmake 的预设配置

      {
          "version": 3,
          "configurePresets": [
              {
                  "name": "vcpkg-default",
                  "displayName": "Default Config with Vcpkg",
                  "description": "Configure with vcpkg toolchain",
                  "generator": "Ninja",
                  "binaryDir": "${sourceDir}/build",
                  "cacheVariables": {
                      "CMAKE_TOOLCHAIN_FILE": "/home/amireux/vcpkg/scripts/buildsystems/vcpkg.cmake"
                  }
              }
          ],
          "buildPresets": [
              {
                  "name": "vcpkg-default",
                  "configurePreset": "vcpkg-default"
              }
          ]
      }
      
    • settings.json:这是配置 Cmake 的设置,注意修改 cmake.sourceDirectory 中的正确路径。

      {
          "cmake.configureOnOpen": true,
          "cmake.buildDirectory": "${workspaceFolder}/build",
          "cmake.generator": "Ninja",
          "cmake.configureArgs": [
              "-DCMAKE_EXPORT_COMPILE_COMMANDS=ON"
          ],
          "cmake.buildBeforeRun": true,
          "cmake.options": {
              "args": [
                  "--loglevel=verbose"
              ]
          },
          "files.associations": {
              "*.cpp": "cpp",
              "*.h": "cpp",
              "*.hpp": "cpp"
          },
          "C_Cpp.default.configurationProvider": "ms-vscode.cmake-tools",
          "editor.formatOnSave": true,
          "cmake.copyCompileCommands": "${workspaceFolder}/build/compile_commands.json",
          "cmake.sourceDirectory": "${workspaceFolder}", //指定 CMake 项目的源码根目录(即 CMakeLists.txt 所在的目录),确保 CMake 能正确找到项目配置文件。
          "cmake.configureSettings": {
              "CMAKE_TOOLCHAIN_FILE": "/home/amireux/vcpkg/scripts/buildsystems/vcpkg.cmake"
          }
      }
      

      注意这里面最重要的是 cmake.configureSettings 这一项,它是确保 cmake 可以和 vcpkg 正确在一起使用的必要参数,路径一定要输入正确。另一种办法是,在 VScode 中快捷键 "Ctrl+ ," 打开搜索框输入 Cmake: Configure Settings 这一项,点击 Edit in settings.json。

      {
          "cmake.configureSettings": {
              // 将路径替换为你自己的 vcpkg 工具链文件路径
              "CMAKE_TOOLCHAIN_FILE": "/home/your_username/vcpkg/scripts/buildsystems/vcpkg.cmake"
          },
      }
      
  3. 创建一个测试文件 test.cpp,并编写 CMakeLists.txt,注意,CMakeLists.txt 一个字母也不可以错,包括大小写,且这两个是同级的。

    //test.cpp
    
    #include <iostream>
    #include <drogon/drogon.h>
    #include<fmt/format-inl.h>
    
    using namespace std;
    
    void myprint();
    
    void myprint()
    {
        cout << "hello" << endl;
    };
    
    int main()
    {
        myprint();
        return 0;
    }
    
    #	CMakeLists.txt
    #	注意需要替换你自己的用户名
    set(CMAKE_TOOLCHAIN_FILE "/home/amireux/vcpkg/scripts/buildsystems/vcpkg.cmake" CACHE STRING "Vcpkg toolchain file")
    
    cmake_minimum_required(VERSION 3.10)
    project(hello)
    
    #	设置 vcpkg 工具链
    set(CMAKE_TOOLCHAIN_FILE "/home/amireux/vcpkg/vcpkg/scripts/buildsystems/vcpkg.cmake")
    
    #	设置 C++ 标准
    set(CMAKE_CXX_STANDARD 17)
    set(CMAKE_CXX_STANDARD_REQUIRED ON)
    
    #	查找 Drogon 包
    find_package(Drogon REQUIRED)
    
    #	添加可执行文件
    add_executable(${PROJECT_NAME} hello.cpp)
    
    #	链接 Drogon 库
    target_link_libraries(${PROJECT_NAME} PRIVATE Drogon::Drogon)
    
    #	添加包含目录
    target_include_directories(${PROJECT_NAME} PRIVATE ${DROGON_INCLUDE_DIRS})
    

    快捷键 Ctrl+Shift+B 构建代码,此时可以看到构建成功,在 build 文件夹下打开终端输入以下命令。

    #	构建
    #	替换为自己的 cpp文件名
    ./hello.cpp
    

运行成功!!!

六、出现的问题

在包安装完并导入之后,发现编译不通过,提示找不到这个包?

在这里插入图片描述

  1. 首先,要确认你的工作区,确保你的 cpp 文件和 CMakeLists.txt 为同级文件。

  2. 确认 vcpkg 安装的包要有对应的 .cmake 配置文件,例如:如果安装的是 drogon 包,则应该有对应的 drogonconfig.cmake。这个 cmake 文件路径在:"/home/vcpkg/installed/x64-linux/share" 对应的包文件中,如果没有,删除包并重新下载。

    vcpkg remove <包名>
    vcpkg install <包名>
    
  3. 上述如果没问题,就要考虑构建的问题。选择 CmakeLists.txt 界面,构建,在对应的 build 文件夹中,如果找到了生成的可执行文件,那么说明使用 cmake 构建没有问题,只是编译不通过。这是因为,在构建的时候,默认使用 gcc/g++,因此要确认在 tasks.json 文件中,关于 cmake - build 这一项任务中的 group 中有无 isDefault:true,将 cmake 作为默认的构建工具。此时,选择 .cpp 界面,重新构建,就会发现编译通过,不报错了。

    "tasks": [
            {
                "label": "cmake-build",
                "type": "shell",
                "command": "cmake",
                "args": [
                    "--build",
                    "${workspaceFolder}/build",
                    "--config",
                    "Debug"
                ],
                "group": {  // 修改这里,将 group 改为对象形式并添加 isDefault
                    "kind": "build",
                    "isDefault": true  // 关键:设为默认构建任务
                },
                "problemMatcher": [
                    "$gcc"
                ]
            },
    
posted @ 2025-12-31 14:23  Amireux77  阅读(5)  评论(0)    收藏  举报