环境配置以及lab0

还没开始上课,把 Lab0 下载下来看了一下。看到虚拟机提供的是 Ubuntu 18.04 有点力竭,Mac 也没容量放虚拟机了,所以干脆直接配置环境。

Lab0 只有一个 Eigen3 需要自己弄,是一个外部引用的包。看到不论是 CMake 还是这个包,版本都落后自己下载的好几个大版本,就不禁感到唏嘘。

还没有管理过 C++ 的包,也没有自己写过 CMake,开始就被上了一课。

Eigen3 配置

CMakeLists.txt 直接使用 find_package 就好了,苦了 .vscode/c_cpp_properties.json 需要改一下 include 部分,加一个:

/opt/homebrew/include/eigen3

研究了一会,发现对于homebrew安装的话,有三个地方都有 Eigen:

  1. /opt/homebrew/include/eigen3
  2. /opt/homebrew/opt/eigen
  3. /opt/homebrew/Cellar/eigen/5.0.1

本质都指向Cellar。其中,链接关系如下:

$ ls -ld /opt/homebrew/include/eigen3
lrwxr-xr-x@ 1 quam1123  admin  36 Jul  2 22:48 /opt/homebrew/include/eigen3 -> ../Cellar/eigen/5.0.1/include/eigen3

$ ls -ld /opt/homebrew/opt/eigen
lrwxr-xr-x@ 1 quam1123  admin  21 Jul  2 22:48 /opt/homebrew/opt/eigen -> ../Cellar/eigen/5.0.1

也就是说:

  • /opt/homebrew/opt/eigen 是指向当前 Eigen 安装版本目录的软链接。
  • /opt/homebrew/include/eigen3 是指向 Eigen 安装版本目录下头文件目录的软链接。

Wenbo Shen 说过,softlink 创造了一个指向另一个路径的文件…但是 Wenbo Shen 教我们用的是 stat 而不是 ls -ld,我还是小白了。

终于,VS Code 编辑器也不爆红了,可喜可贺。

这个 Lab 只需要简单补全一下矩阵的加法、矩阵乘法、矩阵数乘、矩阵与向量乘法。然后就需要看一下 CMake 的具体含义,以及怎么把代码跑起来。

CMakeLists.txt

cmake_minimum_required(VERSION 3.10) # 最小需要版本
project(Transformation LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17) # C++17
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(Eigen3 REQUIRED NO_MODULE) # 找 Eigen3,找不到就报错

add_executable(Transformation main.cpp) # 编译 main.cpp 为可执行程序

target_link_libraries(Transformation PRIVATE Eigen3::Eigen)
# Eigen3::Eigen 是之前 find_package 找到的 CMake Target
# 不一定真的链接二进制库,因为 Eigen 是 header-only,作用类似把 Eigen 的 include 路径传给 Transformation
# PRIVATE 暂时用不上
# 若删除会 fatal error: 'Eigen/Core' file not found

编译与运行

cmake -S . -B build
cmake --build build
./build/Transformation
rm -rf ./build

alt text