Skip to content

CMake 配置 Eigen 库使用指南

基本配置

CMakeLists.txt 示例

以下是一个基本的 CMakeLists.txt 示例,用于配置 Eigen 库:

cmake_minimum_required(VERSION 3.3)
project(EigenTest)

# 指定 Eigen3 的 CMake 配置文件路径(如果需要)
# set(Eigen3_DIR /path/to/eigen3/share/eigen3/cmake)

# 查找 Eigen3 包
find_package(Eigen3 REQUIRED)

# 包含 Eigen 头文件
include_directories(${EIGEN3_INCLUDE_DIRS})

# 添加可执行文件
add_executable(EigenTest main.cpp)

示例代码

以下是一个简单的 C++ 示例代码,演示如何使用 Eigen 进行矩阵运算:

#include <iostream>
#include <Eigen/Core>
#include <Eigen/Dense>

int main() {
    // 创建一个 4x4 的矩阵
    Eigen::MatrixXd mMat(4, 4);
    mMat << 11, 10, 13, 15,
            3, 24, 56, 1,
            2, 12, 45, 0,
            8, 5, 6, 4;

    // 查找最大值和最小值及其位置
    Eigen::MatrixXd::Index maxRow, maxCol, minRow, minCol;
    double max = mMat.maxCoeff(&maxRow, &maxCol);
    double min = mMat.minCoeff(&minRow, &minCol);

    // 输出结果
    std::cout << "Max = " << max << std::endl;
    std::cout << "Max Position: (" << maxRow << ", " << maxCol << ")" << std::endl;
    std::cout << "Min = " << min << std::endl;
    std::cout << "Min Position: (" << minRow << ", " << minCol << ")" << std::endl;

    return 0;
}

高级配置

指定 Eigen3_DIR

如果 Eigen 的 CMake 配置文件不在默认路径下,可以通过设置 Eigen3_DIR 来指定其位置:

set(Eigen3_DIR /path/to/eigen3/share/eigen3/cmake)
find_package(Eigen3 REQUIRED)

包含特定模块

Eigen 库包含多个模块,如 GeometryLUSVD 等。如果需要使用这些模块,可以在代码中包含相应的头文件:

#include <Eigen/Geometry>
#include <Eigen/LU>
#include <Eigen/SVD>

性能优化

为了提高编译速度和程序性能,可以添加以下选项:

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DEIGEN_DONT_ALIGN_STATICALLY")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DEIGEN_DONT_VECTORIZE")

编译和运行

编译

使用 CMake 和 Make 工具编译项目:

mkdir build
cd build
cmake ..
make

运行

运行生成的可执行文件:

./EigenTest

参考

更多关于 Eigen 库的详细信息和高级用法,请参考 Eigen 官方文档:Eigen 官方文档

通过以上步骤,你可以轻松地在 C++ 项目中配置和使用 Eigen 库,进行高效的矩阵运算。

Ref

https://blog.csdn.net/geerniya/article/details/103202562 https://blog.csdn.net/juluwangriyue/article/details/122162035