环境搭建

一. 实验基本环境准备

使用vscode连接腾讯轻量级服务器, 该服务器版本为Ubuntu 22.04

二. git相关操作

git分两个东西: 工作区(git tree)和.git(.git中保存版本信息)

(1) 在github上创建自己私有的bare仓库

让本地版本信息和私有的bare仓库保持一致(bare方式的远程仓库,不同协作者可clone(clone方式有.git,即有工作区)下来,做各自的开发,最终push到远程bare仓库,不会冲突)

  1. 在 GitHub 上创建一个新的私有仓库,并设置ssh秘钥方式连接(详情见git合集第一篇)

  2. 用–bare方式从cmu项目官网,将.git中的内容(版本关系)克隆到本地:

    git clone --bare https://github.com/cmu-db/bustub.git bustub-public
    
    解析:
    git clone:克隆远程代码库到本地。
    --bare:创建裸仓库,不会有实际代码文件,只保留 Git 版本控制信息。
    https://github.com/cmu-db/bustub.git:CMU-DB 提供的公有 BusTub 仓库 URL。
    bustub-public:克隆后的本地目录名称。
    
  3. 将裸克隆的仓库推送到你的私有仓库

    cd bustub-public
    
     //使用 SSH 方式:
     git push git@github.com:leo-meixi/CMU15-445-2022-.git master
    
  4. 删除裸克隆的本地仓库

    推送完成后,我们不再需要 bustub-public,可以安全地删除:

    cd ..
    rm -rf bustub-public
    
  5. 克隆私有 BusTub 代码库到本地

    完成镜像后,可以从私有仓库克隆完整的代码库到本地开发环境:

    ​ 使用 SSH 方式:

     git clone git@github.com:leo-meixi/CMU15-445-2022-.git
     //不写本地仓库的话,默认生成CMU15-445-2022-文件夹
     //注意使用的克隆方式是clone,即CMU15-445-2022-中有.git文件,有工作区
    

(2) 将官方 BusTub 仓库作为远程仓库

先cd到CMU15-445-2022-中

  1. 添加官方 BusTub 仓库作为远程仓库,以保持代码最新
git remote add public https://github.com/cmu-db/bustub.git
  1. 验证远程仓库是否添加成功:
git remote -v
  1. 如果成功,应该看到类似以下的输出:

(3) 选择适当的版本(2022 fall)

  1. 从cmu官方github中找到commit版本号

复制commit版本号(d830931)

  1. 切换到 Fall 2022 版本, 并创建新的分支

    git checkout -b bustub-2022-dev d830931
    

    这会创建一个新的分支 bustub-2022-dev 并切换到 d830931(Fall 2022 最后一个 commit)

  2. 当前已在新的分支bustub-2022-dev上, 并且新的分支是基于Fall 2022版本代码的

  1. 现在可以在 bustub-2022-dev 分支上随意开发

    开发完成后,有几种选择

    1. 直接在 bustub-2022-dev 分支上提交并推送

    如果你 只在自己的仓库中开发,你可以继续在 bustub-2022-dev 进行提交,并定期 git push,无需合并到 main


    2. 将 bustub-2022-dev 合并回 main(可选)

    如果你想让 main 也变成你的最终代码,你可以将 bustub-2022-dev 的内容合并到 main

    bash复制编辑# 切换到 main 分支
    git checkout main
    
    # 合并 bustub-2022-dev 的修改
    git merge bustub-2022-dev
    
    # 推送到远程仓库
    git push origin main
    

    这样,你的 main 分支就会变成 bustub-2022-dev 代码的最新状态。


    3. 创建一个新的 GitHub 分支用于提交

    如果你要提交作业或希望保存多个版本,你可以在 GitHub 上新建分支,例如 bustub-2022-final

    bash复制编辑# 本地创建 bustub-2022-final 分支
    git checkout -b bustub-2022-final
    
    # 推送到远程仓库
    git push origin bustub-2022-final
    

    这样,你的 bustub-2022-dev 仍然可以继续开发,而 bustub-2022-final 代表你的最终版本。


    总结

    • 开发阶段:直接在 bustub-2022-dev 分支上修改、提交、推送。

    • 开发完成后

      • 继续使用 bustub-2022-dev,不合并到 main(推荐)。
      • 或者合并 bustub-2022-devmain
      • 或者创建 bustub-2022-final 作为最终版本,避免影响 bustub-2022-dev

    你可以根据自己的需求选择适合的方案!

三. 安装相应的包

  1. 使用官方提供的脚本build_support/packages.sh,安装

    sudo build_support/packages.sh
    

脚本内容如下:

#!/bin/bash

## =================================================================
## BUSTUB PACKAGE INSTALLATION
##
## This script will install all the packages that are needed to
## build and run the DBMS.
##
## Supported environments:
##  * Ubuntu 18.04 (x86-64)
##  * Ubuntu 20.04 (x86-64)
##  * Ubuntu 22.04 (x86-64)
##  * macOS 11 Big Sur (x86-64 or ARM)
##  * macOS 12 Monterey (x86-64 or ARM)
## =================================================================

main() {
  set -o errexit

    if [ "$1" == "-y" ] 
    then 
        install
    else
        echo "PACKAGES WILL BE INSTALLED. THIS MAY BREAK YOUR EXISTING TOOLCHAIN."
        echo "YOU ACCEPT ALL RESPONSIBILITY BY PROCEEDING."
        read -p "Proceed? [Y/n] : " yn
    
        case $yn in
            Y|y) install;;
            *) ;;
        esac
    fi

    echo "Script complete."
}

install() {
  set -x
  UNAME=$(uname | tr "[:lower:]" "[:upper:]" )

  case $UNAME in
    DARWIN) install_mac ;;

    LINUX)
      version=$(cat /etc/os-release | grep VERSION_ID | cut -d '"' -f 2)
      case $version in
        18.04) install_linux ;;
        20.04) install_linux ;;
        22.04) install_linux ;;
        *) give_up ;;
      esac
      ;;

    *) give_up ;;
  esac
}

give_up() {
  set +x
  echo "Unsupported distribution '$UNAME'"
  echo "Please contact our support team for additional help."
  echo "Be sure to include the contents of this message."
  echo "Platform: $(uname -a)"
  echo
  echo "https://github.com/cmu-db/bustub/issues"
  echo
  exit 1
}

install_mac() {
  # Install Homebrew.
  if test ! $(which brew); then
    echo "Installing Homebrew (https://brew.sh/)"
    ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  fi
  # Update Homebrew.
  brew update
  # Install packages.
  brew ls --versions cmake || brew install cmake
  brew ls --versions coreutils || brew install coreutils
  brew ls --versions doxygen || brew install doxygen
  brew ls --versions git || brew install git
  (brew ls --versions llvm | grep 12) || brew install llvm@12
}

install_linux() {
  # Update apt-get.
  apt-get -y update
  # Install packages.
  apt-get -y install \
      build-essential \
      clang-12 \
      clang-format-12 \
      clang-tidy-12 \
      cmake \
      doxygen \
      git \
      g++-12 \
      pkg-config \
      zlib1g-dev
}

main "$@"

对脚本的解释: 安装完会输出Script complete.

这个 bash 脚本用于安装 BusTub 依赖的软件包,支持 Ubuntu(18.04、20.04、22.04)和 macOS(Big Sur 11、Monterey 12)。下面是详细解析:
1. 脚本执行流程
脚本的主要逻辑在 main 函数中:

bash
复制
编辑
main "$@"
它会检查用户是否传入 -y 选项,如果是,直接安装,否则会提示用户确认。

🔹 2. main() 函数
bash
复制
编辑
main() {
  set -o errexit
set -o errexit:遇到错误立即退出,防止后续命令在错误状态下执行。
bash
复制
编辑
  if [ "$1" == "-y" ] 
  then 
      install
  else
      echo "PACKAGES WILL BE INSTALLED. THIS MAY BREAK YOUR EXISTING TOOLCHAIN."
      echo "YOU ACCEPT ALL RESPONSIBILITY BY PROCEEDING."
      read -p "Proceed? [Y/n] : " yn

      case $yn in
          Y|y) install;;
          *) ;;
      esac
  fi

  echo "Script complete."
}
如果脚本带参数 -y,直接调用 install 进行安装。
否则,用户需要手动输入 Y/y 确认后,才会安装。
🔹 3. install() 函数
bash
复制
编辑
install() {
  set -x
  UNAME=$(uname | tr "[:lower:]" "[:upper:]")
set -x:开启调试模式,打印执行的命令。
uname 获取操作系统名称(Linux 或 Darwin),并转换为大写。
🔹 根据操作系统执行不同的安装逻辑
bash
复制
编辑
  case $UNAME in
    DARWIN) install_mac ;;
macOS 调用 install_mac 安装 Homebrew 及依赖。
bash
复制
编辑
    LINUX)
      version=$(cat /etc/os-release | grep VERSION_ID | cut -d '"' -f 2)
      case $version in
        18.04) install_linux ;;
        20.04) install_linux ;;
        22.04) install_linux ;;
        *) give_up ;;
      esac
      ;;
Linux 检查 Ubuntu 版本是否是 18.04、20.04 或 22.04,如果匹配,则执行 install_linux 进行安装。
bash
复制
编辑
    *) give_up ;;
其他不支持的系统,调用 give_up 函数,打印错误信息并退出。
🔹 4. give_up() 函数
bash
复制
编辑
give_up() {
  set +x
  echo "Unsupported distribution '$UNAME'"
  echo "Please contact our support team for additional help."
  echo "Be sure to include the contents of this message."
  echo "Platform: $(uname -a)"
  echo
  echo "https://github.com/cmu-db/bustub/issues"
  echo
  exit 1
}
set +x:关闭调试模式。
输出不支持的系统信息,提示用户提交 Issue 并提供系统信息。
🔹 5. install_mac() 函数
bash
复制
编辑
install_mac() {
  # 安装 Homebrew(如果未安装)
  if test ! $(which brew); then
    echo "Installing Homebrew (https://brew.sh/)"
    ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  fi

  # 更新 Homebrew
  brew update

  # 安装必要的软件包
  brew ls --versions cmake || brew install cmake
  brew ls --versions coreutils || brew install coreutils
  brew ls --versions doxygen || brew install doxygen
  brew ls --versions git || brew install git
  (brew ls --versions llvm | grep 12) || brew install llvm@12
}
如果 Homebrew 未安装,则安装 Homebrew。
更新 Homebrew,确保最新的软件包。
安装 BusTub 依赖的包,如果包已安装,则跳过。
🔹 6. install_linux() 函数
bash
复制
编辑
install_linux() {
  # 更新 apt-get
  apt-get -y update

  # 安装必要的软件包
  apt-get -y install \
      build-essential \
      clang-12 \
      clang-format-12 \
      clang-tidy-12 \
      cmake \
      doxygen \
      git \
      g++-12 \
      pkg-config \
      zlib1g-dev
}
更新 apt-get,确保安装的是最新的软件包版本。
安装 BusTub 依赖的软件包:
build-essential:基本开发工具(如 make、gcc)。
clang-12、clang-format-12、clang-tidy-12:Clang 编译器及代码格式化工具。
cmake:编译配置工具。
doxygen:代码文档工具。
git:Git 版本控制工具。
g++-12:GCC 12 版本的 C++ 编译器。
pkg-config:编译时查找库路径的工具。
zlib1g-dev:Zlib 压缩库。

四. 编译整个项目

  1. 用cmake编译

    $ mkdir build
    $ cd build
    $ cmake ..
    $ make
    
  2. 注意其中的警告信息, 设置正确的编译器版本

设置默认编译器为clang-12 和 clang++-12

//这样的方式只在当前终端有效(不推荐)
export CC=clang-12
export CC=clang++-12

修改 ~/.bashrc

export PATH=/usr/lib/llvm-12/bin:$PATH
export CC=clang-12
export CXX=clang++-12
//然后运行:
source ~/.bashrc

使用 update-alternatives(更改系统默认编译器)

sudo update-alternatives --install /usr/bin/cc cc /usr/bin/clang-12 100
sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/clang++-12 100
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/clang-12 100
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/clang++-12 100
//然后执行:
sudo update-alternatives --config cc
sudo update-alternatives --config c++
sudo update-alternatives --config gcc
sudo update-alternatives --config g++

执行结果:

验证编译器版本:

编译器设置完成

然后重新运行:

rm -rf build
mkdir build
cd build
cmake ..
make
posted @ 2025-02-22 15:12  msnthh  阅读(25)  评论(0)    收藏  举报