环境配置以及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:
/opt/homebrew/include/eigen3/opt/homebrew/opt/eigen/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
