windows环境下使用clion引入eigen库并实现一个小demo

本文仅作个人记录用,之前未接触过C++,也没有使用过clion和cmake,不喜勿喷。

首先下载clion,mingw并配置相关环境,安装cmake,这部分比较简单,没有遇到什么问题。

接下来新建一个项目,发现Clion已经自动生成了CMakeLists.txt。

在eigen官网下载最新版本的压缩包,window系统下直接下载zip包即可

光下载下来压缩包直接引用肯定是行不通的,要通过CMakeLists.txt来帮助我们的项目和eigen库联系起来。

想要引入eigen库有两种方法,下面先说最简单的一种。

不写find_package

直接把压缩包解压到某个文件夹,比如我直接解压到c盘目录下。

 直接在CMakeLists.txt添加如下的语句即可

include_directories(C:\\eigen-3.4.0)

括号内填自己解压的路径,如果不想写两个\\的话可以换成/

include_directories(C:/eigen-3.4.0)

试着在cpp中include Eigen并使用

#include <Eigen/Dense>

如果可以编译没有报错,说明已经成功了,写一个小Demo测试一下即可。有的时候,Clion可以正常编译运行,但是编辑界面还是爆红提示文件没有找到。

 这种情况点一下上方工具栏的File->Reload CMake Project,一般来说就正常了,暂时没想到别的解决办法......

 写find_package的方法

这种方式相对就比较繁琐一点了。Eigen这个库其实是可以安装的,打开解压后的文件夹会发现其中有个install文件。

 使用记事本打开该文件,其中重点内容如下


Method 2. Installing using CMake
********************************

Let's call this directory 'source_dir' (where this INSTALL file is).
Before starting, create another directory which we will call 'build_dir'.

Do:

  cd build_dir
  cmake source_dir
  make install

The "make install" step may require administrator privileges.

因为cmake有图形化工具,前两步我就不用命令行了。

先在解压的文件夹下新建一个文件夹(其实位置和名字无关紧要)

管理员权限打开图形化工具

 在这之后管理员权限打开命令行窗口(cmd),cd 到新建的文件夹下

执行 如下命令

make install

需要注意的是,我的window 11 默认是没有make的,需要先下载安装再使用这个命令,安装的方式有很多种,我这里使用的是这种方式,如果发现下载不了可能要注意上网方式的科学性,或者用其他替代方案。

安装完成之后,注意上面图形化界面那张图的安装地址,可以去检查一下是否出现了对应的文件夹。接下来我们看看Eigen官网是怎么建议我们在cmake项目中使用eigen的:官网

如果你前面的步骤都是按照这篇文章走的,那么后面的部分其实不用看,重点在于CMakeLists.txt的内容怎么调整,这是官网给出的样例:

cmake_minimum_required (VERSION 3.0)
project (myproject)
find_package (Eigen3 3.3 REQUIRED NO_MODULE)
add_executable (example example.cpp)
target_link_libraries (example Eigen3::Eigen)

其中第1,2,4行都是Clion新建项目时就自动生成的,我们重点要关注的就是3,5行,注意把example换成你自己的项目名称(也就是project里面填的),NO_MODULE和版本填不填都不影响结果。Eigen是怎么解释这段内容的呢?

Eigen exports a CMake target called Eigen3::Eigen which can be imported using the find_package CMake command and used by calling target_link_libraries as in the following example

那么现在唯一的问题就是,find_package到底是怎么知道Eigen安装的路径的?通过查看CMAKE官网对于find_package命令的文档说明,在Config Mode Search Procedu这一栏中,可以看到第7点的解释

 7.Search cmake variables defined in the Platform files for the current system. This can be skipped if NO_CMAKE_SYSTEM_PATH is passed or by setting the CMAKE_FIND_USE_CMAKE_SYSTEM_PATH to FALSE:

The platform paths that these variables contain are locations that typically include installed software. An example being /usr/local for UNIX based platforms.

也就是说,根据平台的不同,find_package会默认地去查找一些固定的路径。知道这一点之后,再打开上文中对于CMAKE_SYSTEM_PREFIX_PATH的介绍,一切就很清楚了。

 这就是为什么很多教程里面写的是/usr/local,因为默认的环境是不一样的。比如这个教程,但是它似乎是第一第二种方法的混合,实际上即便按照这个教程把里面find_package的部分去掉,还是能够成功引入eigen的,因为它实际上使用的是第一种方法。下面给出一个完整可行的txt例子,注意大小写是要区分的

cmake_minimum_required(VERSION 3.19)
project(graph0)
set(CMAKE_CXX_STANDARD 20)
find_package(Eigen3 REQUIRED )
add_executable(graph0 main.cpp )
target_link_libraries (graph0 Eigen3::Eigen)

 写一个小demo测试一下能不能成功使用

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

int main() {
    const double QUARTER_PI = 45.0 * M_PI / 180.0;
    const double HALF_PI = 90.0 * M_PI / 180.0;
    Eigen::Vector<double, 3> point(2, 1, 1);
    Eigen::Matrix3d matrix45;
    Eigen::Matrix3d matrix90;
    matrix45 << cos(QUARTER_PI), -sin(QUARTER_PI), 1,
            sin(QUARTER_PI), cos(QUARTER_PI), 2,
            0, 0, 1;
    matrix90 << cos(HALF_PI), -sin(HALF_PI), 0,
            sin(HALF_PI), cos(HALF_PI), 0,
            0, 0, 1;
    std::cout << "(" << point.x() << "," << point.y() << "," << point.z() << ")" << std::endl;
    point = matrix45 * point;
    std::cout << "(" << point.x() << "," << point.y() << "," << point.z() << ")" << std::endl;
    return 0;
}

输出结果看起来没有问题~

 一切顺利。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值