原版(在PCLConfig.cmake中)
#remove this as soon as eigen is shipped with FindEigen.cmake
macro(find_eigen)
if(PCL_ALL_IN_ONE_INSTALLER)
set(EIGEN_ROOT "${PCL_ROOT}/3rdParty/Eigen")
elseif(NOT EIGEN_ROOT)
get_filename_component(EIGEN_ROOT "C:/Program Files/Eigen3/include/eigen3" ABSOLUTE)
endif(PCL_ALL_IN_ONE_INSTALLER)
if(PKG_CONFIG_FOUND)
pkg_check_modules(PC_EIGEN eigen3)
endif(PKG_CONFIG_FOUND)
find_path(EIGEN_INCLUDE_DIRS Eigen/Core
HINTS ${PC_EIGEN_INCLUDEDIR} ${PC_EIGEN_INCLUDE_DIRS}
"${EIGEN_ROOT}" "$ENV{EIGEN_ROOT}"
PATHS "$ENV{PROGRAMFILES}/Eigen3" "$ENV{PROGRAMW6432}/Eigen3"
"$ENV{PROGRAMFILES}/Eigen" "$ENV{PROGRAMW6432}/Eigen"
PATH_SUFFIXES eigen3 include/eigen3 include)
find_package_handle_standard_args(eigen DEFAULT_MSG EIGEN_INCLUDE_DIRS)
set(EIGEN_DEFINITIONS ${EIGEN_DEFINITIONS})
endmacro(find_eigen)
分析版
#remove this as soon as eigen is shipped with FindEigen.cmake
# r如果有FindEigen.cmake文件就删除macro(find_eigen)宏,Eigen3如果是拷贝安装就不会有FindEigen.cmake文件,另外系统安
# r装的版本往往版本和需要的不一致,很多程序的3rdParty目录中会包含特定版本的Eign3。就是不知道是否需要手动删除。
macro(find_eigen)
if(PCL_ALL_IN_ONE_INSTALLER)
# r如果安装了PCL_ALL_IN_ONE,就把EIGEN_ROOT设置为PCL自带的Eigen3,在3rdParty目录中。
set(EIGEN_ROOT "${PCL_ROOT}/3rdParty/Eigen")
elseif(NOT EIGEN_ROOT)
# r否则,检查EIGEN_ROOT,如果EIGEN_ROOT变量没有设置,就是设置为C:/Program Files/Eigen3/include/eigen3。
get_filename_component(EIGEN_ROOT "C:/Program Files/Eigen3/include/eigen3" ABSOLUTE)
endif(PCL_ALL_IN_ONE_INSTALLER)
# r寻找.pc文件
if(PKG_CONFIG_FOUND)
pkg_check_modules(PC_EIGEN eigen3)
endif(PKG_CONFIG_FOUND)
# r查找Eigen/Core头文件,如果找到将EIGEN_INCLUDE_DIRS设置为所在目录,搜索路径为PATHS和HINTS指定路径
# r加PATH_SUFFIXES。
find_path(EIGEN_INCLUDE_DIRS Eigen/Core
HINTS ${PC_EIGEN_INCLUDEDIR} ${PC_EIGEN_INCLUDE_DIRS}
"${EIGEN_ROOT}" "$ENV{EIGEN_ROOT}"
PATHS "$ENV{PROGRAMFILES}/Eigen3" "$ENV{PROGRAMW6432}/Eigen3"
"$ENV{PROGRAMFILES}/Eigen" "$ENV{PROGRAMW6432}/Eigen"
PATH_SUFFIXES eigen3 include/eigen3 include)
# r如果找到EIGEN_INCLUDE_DIRS就是设置EIGEN_FOUND为TRUE。
find_package_handle_standard_args(eigen DEFAULT_MSG EIGEN_INCLUDE_DIRS)
# r把全局的EIGEN_DEFINITIONS转给局部的EIGEN_DEFINITIONS(猜测)。
set(EIGEN_DEFINITIONS ${EIGEN_DEFINITIONS})
endmacro(find_eigen)