Skip to content

C++ 开发环境准备

基于容器的开发

docker 环境准备和启动项目

按照下列链接中的步骤准备好 docker 环境:

  1. Docker 环境准备

  2. VSCode中安装 Docker 插件

  3. 编写启动容器的相关配置文件:Dockerfiledocker-compose.yml.devcontainer/devcontainer.json

    创建 dockerfiles/Dockerfile 文件,改文件用于构建容器镜像,内容如下

    dockerfile
    FROM ubuntu:24.04
    
    ARG INSTALL_LIST="ubuntu-server ca-certificates locales zsh"
    ARG INSTALL_LIST="$INSTALL_LIST build-essential cmake ninja-build clangd"
    
    ARG MIRRORS_URL="mirrors.ustc.edu.cn"
    ENV DEBIAN_FRONTEND=noninteractive
    
    # set -x 选项会使得每个命令在执行前都会被打印出来,报错时会显示是哪个命令出错
    RUN set -x && \
        sed -i 's/#force_color_prompt=yes/force_color_prompt=yes/g' ${HOME}/.bashrc && \
        sed -i -e "s#//.*archive.ubuntu.com#//${MIRRORS_URL}#g" -e "s#//ports.ubuntu.com#//${MIRRORS_URL}#g" /etc/apt/sources.list.d/ubuntu.sources && \
        apt-get update && apt-get upgrade -y && \
        apt-get install -y --no-install-recommends ${INSTALL_LIST} && \
        apt-get autoremove -y && apt-get clean all && rm -rf /var/lib/apt/lists/* && \
        localedef -i zh_CN -c -f UTF-8 -A /usr/share/locale/locale.alias zh_CN.UTF-8

    创建 docker-compose.yml 文件,改文件用于启动容器,内容如下

    yaml
    services:
       hello-cpp:
          build:
             context: .
             dockerfile: dockerfiles/Dockerfile
          image: hello-cpp-dev:latest  # 构建后镜像的名称和标签
          environment:
          USER: root
          volumes:
             - "~/.ssh:/root/.ssh:ro" # 挂载宿主机的ssh配置文件,方便推拉代码(只读)
             - "/etc/localtime:/etc/localtime:ro" # 挂载宿主机时间到容器
             - .:/root/hello-cpp # 项目代码
          working_dir: /root/hello-cpp
          command: ["sleep", 'infinity']

    创建 .devcontainer/docker-compose.json 文件,改文件用于 VSCode 中配置容器启动参数,内容如下

    json
    {
        "name": "Existing Docker Compose (Extend)",
        "dockerComposeFile": [
            "../docker-compose.yml"
        ],
        "service": "hello-cpp",
        "workspaceFolder": "/root/hello-cpp",
        "postCreateCommand": "cat /etc/os-release",
        "customizations": {
            "vscode": {
                "extensions": [
                    "PKief.material-icon-theme",
                    "mhutchie.git-graph",
                    "ms-vscode-remote.remote-containers",
                    "ms-azuretools.vscode-docker",
                    "llvm-vs-code-extensions.vscode-clangd",
                    "twxs.cmake",
                    "josetr.cmake-language-support-vscode",
                    "ms-vscode.cmake-tools"
                ]
            }
        }
    }
  4. 点击VSCode (最)左下角「打开远程窗口」,弹出的命令中,点击「在容器中重新打开 / Reopen in Container

    打开远程窗口

  5. 也可以在命令面板中搜索并执行命令 「Dev Containers: Rebuild Container Without Cache / 开发容器:重新生成无缓存的容器」(特别是修改了 Dockerfiledocker-compose.yml 时,必须执行此命令)

TIP

  • 在 VSCode 中键入 Ctrl+Shift+P 调出命令面板 ,或者在菜单栏中选择 查看(View) -> 命令面板(Command Palette) 调出命令面板
  • 如果构建失败,可以尝试在 Docker Desktop 中删除对应容器(hello-cpp-ubuntu-dev)和对应镜像(hello-cpp-ubuntu-dev:latest)后重试。如果仍然构建失败,请参考 使用 Dev Containers 插件的过程

运行 demo

进入容器后,在终端中可以通过下面的命令查看当前环境相关信息:

bash
cat /etc/os-release  # 检查当前系统发行版本
uname -m          # 查看系统架构
cat /proc/cpuinfo # 查看CPU信息
cat /proc/meminfo # 查看内存信息

扩展开发环境

如果需要扩展开发环境,可以在 Dockerfile 中添加对应的软件包安装命令,然后执行 Dev Containers: Rebuild Container Without Cache 命令重新构建容器。