VS2019已经在vc++目录中加入eigen的目录为什么还是提示找不到eigen/dense源函数?

关注者
7
被浏览
8,923
登录后你可以
不限量看优质回答 私信答主深度交流 精彩内容一键收藏
最近在使用Visual Studio时想使用一下著名的矩阵运算库:Eigen,摸索了一下如何在Visual Studio中配置。

1 下载Eigen源码

直接到Eigen官网 Eigen ,这里我选择3.3.8版本



2 在VS中创建一个空项目

这里先创建一个空项目



这里演示选择空模板



这里注意,一个解决方案中可以包含多个项目,如果勾选了 将解决方案和项目放在同一目录 ,在这个解决方案里再添加项目,项目的文件夹就也在Desktop目录下,不便于管理。不勾选的话相当于在Desktop/下创建一个Solution文件夹,存放解决方案,Solution/中同时又创建了Project1文件夹,存放Project1的项目文件。在添加项目时就会在Solution/目录下,而不是Desktop/。(这里以下图在Desktop目录下的情况说明问题)



创建完成后会进入VS中,VS中解决资源管理器默认是展示头文件、源文件这些,如下图。



但我们在做项目时,往往按照src、include、config、deps这些文件夹去管理工程文件,因此需要做一些修改。

首先在项目目录下创建src、include、deps、config等文件夹,src存放源文件、include存放头文件、deps用于放置外部库,这里我们的Eigen就解压存放到在这里,最终创建好的目录如下(为了展示文件结构用vs code打开的,这里只要注意eigen的所有文件在deps/eigen目录下,有时候解压软件会创建两层文件夹):



打开 显示所有文件 ,就可以看到每个工程文件夹了



3 设置项目属性,添加Eigen

直接在项目上右键-->属性,然后在属性页上选择 配置 --> 所有配置 平台 --> 所有平台 ,我这里项目需要还改了解决方案平台为 x64 、C17标准。



现在在属性配置中有常规、高级等标签,而我们需要在 C/C++ 标签下进行配置,如下图



那么怎么调出这个标签呢?具体方法如下:

在src中随便添加一个C++文件,这里命名为 test_eigen.cpp ,然后再右键项目属性,就会出现 C/C++ 标签了。





进入标签页后,可以看到第一个是 附加包含目录 ,这里将我们的Eigen目录添加到这里就可以了。为了便于项目合作,这里应该是相对路径。如下,这里把include也加入进去。



4 测试

完成上述步骤后,在刚刚创建的 test_eigen.cpp 中编写一段代码进行测试:

test_eigen.cpp

 #include <iostream>
 #include <Eigen\Dense>
 using namespace std;
 typedef Eigen::Matrix<int, 3, 3> Matrix3i;
 int main()
     Matrix的初始化方法
     Eigen::Matrix<int, 3, 3> 
     int 代表Matrix的数据类型,3,3 分别代表 rows, cols
     Matrix3i m1;
     m1(0,0) = 1
     m1(0,1) = 2
     m1(0,2) = 3
     或者用 m1 << 1,2,3 ...
     Matrix3i m1;
     m1 << 1, 2, 3, 4, 5, 6, 7, 8, 9;
     cout << "m1 = \n" << m1 << endl;
     Matrix3i m2;
     m2 << 1, 0, 0, 0, 1, 0, 0, 0, 1;
     cout << "m2 = \n" << m2 << endl;
     cout << "m1 * m2 = \n" << (m1 * m2) << endl;
     return 0;

运行一下,可以正常输出,表明没有问题。



5 多个项目情况

如果解决方案中存在多个项目A、B、C等,假设eigen源文件在A项目的deps/eigen中,那B、C项目如何配置呢?

这里我们再新建一个项目:右键 解决方案 ,添加-->新建项目,这里选择默认空项目,命名为Project2



创建后如下:



同样,在Project文件夹中也创建src、include等文件夹,但这里我们不创建deps了,我们想使用Project1/deps中的Eigen。

首先,右键Project2-->属性,进入到C/C++标签页下,如果属性页中没有C/C++,那么同样在Project2/src创建一个.cpp文件即可。

然后添加如下内容:



这里 $(ProjectDir) 表示Project2这个文件夹,即当前项目的项目文件夹,如果还有一个Project3,那么这个就是Project3对应的文件夹。

测试

在Project/src中添加一个测试.cpp文件,同时右键Project2,设置为启动项



test_eigen.cpp

 #include <iostream>
 #include <Eigen\Dense>
 using namespace std;
 typedef Eigen::Matrix<int, 3, 3> Matrix3i;
 int main()
     Matrix的初始化方法
     Eigen::Matrix<int, 3, 3>
     int 代表Matrix的数据类型,3,3 分别代表 rows, cols
     Matrix3i m1;
     m1(0,0) = 1
     m1(0,1) = 2
     m1(0,2) = 3
     或者用 m1 << 1,2,3 ...
     cout << "**********Project2********" << endl;
     Matrix3i m1;
     m1 << 1, 2, 3, 4, 5, 6, 7, 8, 9;
     cout << "m1 = \n" << m1 << endl;
     Matrix3i m2;
     m2 << 1, 0, 0, 0, 1, 0, 0, 0, 1;
     cout << "m2 = \n" << m2 << endl;