在CMakeLists中寻找Eigen库时发现的问题
今天看到ros中一个包在使用Eigen头文件的时候直接写的include”Eigen/Core”,在同一个系统同样的环境变量下,ros工作空间以外的工程,却必须包含include “eigen3/Eigen/Core”,不然就找不到该头文件,感觉很奇怪,查看该ros包的CMakeLists,部分截图如下
发现多了一个cmake_modules的包,找到这个包,里面有个FindEigen.cmake的文件,打开之后,是这个样子
可以看到其中的EIGEN_INCLUDE_DIRS已经被重映射了,可以通过message打印出这个环境变量,为/usr/include/eigen3,所以在他的CMakeLists中,包含这个头文件路径时已经把eigen3这个文件夹包含了,这时候代码中就可以将include “eigen3/Eigen/Core”简化成
include”eigen3/Eigen/Core”。还可以直接将这个FindEigen.Cmake直接保存到当前工程的cmake_modules文件中,在自己的CMakeLists中加入
同样可以得到默认的/usr/include/eigen3路径,需要注意的是,这时候不能用find_package(Eigen3 REQUIRED),只能用find_package(Eigen REQUIRED)或者加入版本号。
如果在qt_creater编辑器中想让IDE找到这个头文件,则需要在project.includes中加入这个路径。