☰
VS2019 安装第三方矩阵库 Eigen 3.4.1
2026/10/18 14:58:54 网站建设 项目流程

适用环境:Windows 10/11、Visual Studio 2019(MSVC v142)、CMake 3.15 或更高版本。本文所有命令在x64 Native Tools Command Prompt for VS 2019(CMD)中运行,不要直接粘贴到 Git Bash 或 PowerShell。

1. Eigen 需要编译吗?

Eigen 是头文件模板库(header-only)。普通工程只需包含<Eigen/Dense>,不必生成或链接eigen.lib。CMake 主要用于安装头文件及导出Eigen3::Eigen接口目标;真正需要编译的是调用 Eigen 的应用程序或Eigen 自带的测试程序。[1][2]

验证方式编译内容用途
方式一:最小 C++ 程序自己的main.cpp验证安装、头文件查找、VS2019 编译和运行
方式二:完整测试套件Eigen 官方已配置的单元测试程序检验该版本在当前 MSVC 环境下的功能与兼容性

两种方式可以分别执行。只想在项目中使用 Eigen,完成方式一即可;要验证 Eigen 自身,则继续执行方式二。

2. 准备环境与下载源码

  1. 安装Visual Studio 2019,勾选“使用 C++ 的桌面开发”,确保包含MSVC v142和Windows 10 SDK。
  2. 安装CMake 3.15+并加入PATH。
  3. 从 Eigen 3.4.1 官方发布页 下载源码压缩包,解压到E:\eigen-3.4.1-src。[3]
  4. 打开开始菜单中的x64 Native Tools Command Prompt for VS 2019,执行:
cmake --version cl where cmake

cmake和cl能显示版本信息即可;单独运行cl时提示未提供源文件是正常现象。

检查源码目录(应当都存在):

dir "E:\eigen-3.4.1-src\CMakeLists.txt" dir "E:\eigen-3.4.1-src\Eigen\Dense"

路径约定:以下假设有D:源码盘和E:安装盘;如没有对应盘符,统一替换命令中的路径。源码根目录必须是直接包含CMakeLists.txt和Eigen文件夹的目录。

3. 安装 Eigen 头文件(两种方式共用)

在 VS2019 命令提示符中执行:

① 配置

使用独立构建目录E:\eigen-3.4.1-src\build,关闭测试等无关目标。

Windows Bat

cmake -S "D:\eigen-3.4.1-src" -B "D:\eigen-3.4.1-src\build" ^ -G "Visual Studio 16 2019" -A x64 ^ -DCMAKE_INSTALL_PREFIX="E:\libEigen341" ^ -DBUILD_TESTING=OFF ^ -DEIGEN_BUILD_TESTING=OFF ^ -DEIGEN_BUILD_DOC=OFF ^ -DEIGEN_BUILD_DEMOS=OFF ^ -DEIGEN_BUILD_BLAS=OFF ^ -DEIGEN_BUILD_LAPACK=OFF

Linux Shell

cmake-S"E:\eigen-3.4.1-src"-B"E:\eigen-3.4.1-src\build"\-G"Visual Studio 16 2019"-Ax64\-DCMAKE_INSTALL_PREFIX="E:\libEigen341"\-DBUILD_TESTING=OFF\-DEIGEN_BUILD_TESTING=OFF\-DEIGEN_BUILD_DOC=OFF\-DEIGEN_BUILD_DEMOS=OFF\-DEIGEN_BUILD_BLAS=OFF\-DEIGEN_BUILD_LAPACK=OFF
CMake 选项功能及作用
-S "E:\eigen-3.4.1-src"指定 Eigen 3.4.1 源码目录,包含CMakeLists.txt。
-B "E:\eigen-3.4.1-src\build"指定构建目录,存放 CMake 缓存及生成的 VS2019 工程文件;不存在则自动创建。
-G "Visual Studio 16 2019"指定使用 Visual Studio 2019 生成器。
-A x64指定 64 位(x64)目标平台。
-DCMAKE_INSTALL_PREFIX="E:\libEigen341"指定安装根目录;执行cmake --install后,头文件通常位于其include\eigen3子目录。
-DBUILD_TESTING=OFF关闭通用 CTest 测试配置。
-DEIGEN_BUILD_TESTING=OFF关闭 Eigen 官方单元测试工程的生成。
-DEIGEN_BUILD_DOC=OFF关闭 Eigen 文档构建,避免额外依赖 Doxygen、LaTeX。
-DEIGEN_BUILD_DEMOS=OFF关闭 Eigen 演示程序的构建。
-DEIGEN_BUILD_BLAS=OFF不构建 Eigen 提供的 BLAS 兼容库,不影响 Eigen 常规矩阵运算。
-DEIGEN_BUILD_LAPACK=OFF不构建 Eigen 提供的 LAPACK 兼容库,不影响 Eigen 自身的矩阵分解功能。

② 安装

cmake --install "E:\eigen-3.4.1-src\build" --config Release

③ 验证文件

dir "E:\libEigen341\include\eigen3\Eigen\Dense"

能够找到Dense,说明头文件已安装。头文件包含目录是...\include\eigen3,不是...\include\eigen3\Eigen。

说明:此步骤不需要先编译ALL_BUILD,因为 Eigen 核心没有待编译的二进制库。下一节才会实际调用 MSVC 编译代码。

4. 方式一:编译最小 C++ 程序

4.1 创建示例工程

创建目录:

mkdir "D:\eigen-demo"

在D:\eigen-demo下新建两个文件(注意扩展名不是.txt)。

main.cpp

#include<Eigen/Dense>#include<iostream>intmain(){Eigen::Matrix2d A;A<<1.0,2.0,3.0,4.0;Eigen::Vector2db(5.0,11.0);constEigen::Vector2d x=A.colPivHouseholderQr().solve(b);std::cout<<"Eigen "<<EIGEN_WORLD_VERSION<<'.'<<EIGEN_MAJOR_VERSION<<'.'<<EIGEN_MINOR_VERSION<<'\n';std::cout<<"x = "<<x.transpose()<<'\n';return(A*x-b).norm()<1e-10?0:1;}

CMakeLists.txt

cmake_minimum_required(VERSION 3.15) project(EigenDemo LANGUAGES CXX) set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) find_package(Eigen3 3.4.1 CONFIG REQUIRED) add_executable(eigen_demo main.cpp) target_link_libraries(eigen_demo PRIVATE Eigen3::Eigen)

Eigen3::Eigen是传递包含路径等信息的CMake 接口目标,不是eigen.lib。[2]

4.2 配置、编译、运行

cmake -S "D:\eigen-demo" -B "D:\eigen-demo\build" -G "Visual Studio 16 2019" -A x64 -DCMAKE_PREFIX_PATH="E:\libEigen341" cmake --build "D:\eigen-demo\build" --config Release "D:\eigen-demo\build\Release\eigen_demo.exe"

预期输出:

Eigen 3.4.1 x = 1 2

程序退出码为0表示残差检查通过。若要确认退出码,紧接着执行:

echo %ERRORLEVEL%

也可以打开D:\eigen-demo\build\EigenDemo.sln,选择x64 / Release编译eigen_demo。

5. 方式二:编译并运行 Eigen 完整测试套件

本流程使用独立构建目录E:\eigen-3.4.1-src\tests,不修改第 3 节的安装配置。完整测试只包括当前配置已注册、依赖条件满足的测试;没有安装的可选依赖不会自动成为可执行的测试。

5.1 启用测试并生成 VS2019 工程

Windows Bat

cmake -S "E:\eigen-3.4.1-src" -B "E:\eigen-3.4.1-src\tests" -G "Visual Studio 16 2019" -A x64 -DBUILD_TESTING=ON -DEIGEN_BUILD_TESTING=ON -DEIGEN_TEST_CXX11=ON -DEIGEN_LEAVE_TEST_IN_ALL_TARGET=OFF -DEIGEN_BUILD_DOC=OFF -DEIGEN_BUILD_DEMOS=OFF -DEIGEN_BUILD_BLAS=OFF -DEIGEN_BUILD_LAPACK=OFF

Linux Shell

cmake-S"E:\eigen-3.4.1-src"-B"E:\eigen-3.4.1-src\tests"\-G"Visual Studio 16 2019"-Ax64\-DBUILD_TESTING=ON\-DEIGEN_BUILD_TESTING=ON\-DEIGEN_TEST_CXX11=ON\-DEIGEN_LEAVE_TEST_IN_ALL_TARGET=OFF\-DEIGEN_BUILD_DOC=OFF\-DEIGEN_BUILD_DEMOS=OFF\-DEIGEN_BUILD_BLAS=OFF\-DEIGEN_BUILD_LAPACK=OFF

主要参数:

参数值作用
EIGEN_BUILD_TESTINGON生成 Eigen 单元测试及测试目标
BUILD_TESTINGON启用 CTest 测试支持
EIGEN_TEST_CXX11ON启用需要 C++11 的相关测试;VS2019 支持
EIGEN_LEAVE_TEST_IN_ALL_TARGETOFF测试不放入默认ALL_BUILD;改为显式执行buildtests
EIGEN_BUILD_DOC / DEMOSOFF不构建文档、演示程序
EIGEN_BUILD_BLAS / LAPACKOFF不构建可选 BLAS/LAPACK 接口库

5.2 编译整个已配置测试套件

cmake --build "E:\eigen-3.4.1-src\tests" --config Release --target buildtests --parallel 2

buildtests是 Eigen 官方提供的测试聚合目标,用于编译单元测试;不要把ALL_BUILD当作完整测试的同义词。[4]

建议先用--parallel 2。测试中有大量模板实例化,若遇到 MSVCC1060、C1076或内存不足,可改为--parallel 1。

5.3 执行全部已编译测试

cd /d "E:\eigen-3.4.1-src\tests" ctest -C Release --output-on-failure -j 2

这里的-C Release不可省略:VS2019 是多配置生成器,CTest 需要知道测试程序位于 Release 目录下。构建测试和运行测试是两个独立动作;单独执行ctest不会自动补编未生成的测试程序。[4]

通过标准:CTest 最后报告100% tests passed、0 tests failed,且没有Not Run。如果有失败或未运行项,应查看其具体原因,不能只看部分PASS。

5.4 通过 Visual Studio 界面构建(可选)

打开E:\eigen-3.4.1-src\tests目录中生成的.sln文件,选择x64 / Release;在“解决方案资源管理器”中查找并生成buildtests目标。之后仍在上述 CMD 窗口运行ctest -C Release --output-on-failure -j 2。

若只想快速排查单个测试,可先用ctest -N查看测试名称,再编译对应测试目标并使用ctest -C Release -R "名称正则" --output-on-failure。这属于定向调试,不等于完整测试。

6. 常见问题

问题处理方法
cl未识别使用x64 Native Tools Command Prompt for VS 2019;检查 MSVC v142 是否安装
找不到CMakeLists.txt或Eigen\Dense解压路径多了一层目录;定位真正的 Eigen 源码根目录
找不到Eigen3Config.cmake先完成第 3 节安装;检查CMAKE_PREFIX_PATH指向安装根目录,而非include\eigen3
Eigen/Dense: No such file or directory检查头文件是否已安装,包含目录应指向...\include\eigen3
生成器、x64/Win32 配置冲突给不同生成器或平台使用独立build目录;不要复用旧缓存
ALL_BUILD没有编译测试正常;使用--target buildtests明确构建测试套件
CTest 报Unable to find executable先执行第 5.2 节,检查编译是否成功,并确保 CTest 指定-C Release
MSVCC1060/C1076降低构建并行度,如--parallel 1;检查系统可用内存
CTest 有个别测试失败查看--output-on-failure输出;区分编译失败、断言失败、超时与缺少可选依赖,不能直接判定安装失败
找不到eigen.lib正常。Eigen 核心为头文件模板库,无需链接二进制库

7. 参考资料

[1] Eigen 官方主页:Requirements(头文件库及 CMake 用途)。

[2] Eigen 3.4 官方文档:Using Eigen in CMake Projects。

[3] Eigen 3.4.1 官方源码与发布页面。

[4] Eigen 官方开发文档:Tests(buildtests、check、CTest)。

[5] Eigen 3.4.1 源码:顶层 CMakeLists.txt。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询