IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> windows环境下使用clion引入eigen库并实现一个小demo -> 正文阅读

[C++知识库]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;
}

输出结果看起来没有问题

?一切顺利。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-12-10 10:52:59  更:2021-12-10 10:54:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:48:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码