CMake find_package无法用于本征吗?

时间:2018-12-31 22:16:34

标签: cmake travis-ci eigen eigen3

我目前正在使用Eigen开发一个Kalman过滤库,并且已经在我的开发Mac上成功地使它运行了。现在,我尝试使用Travis CI进行设置,而CMake在查找软件包时遇到了麻烦。首先,我sudo apt install libeigen3-dev,然后尝试使用以下配置运行cmake:

cmake_minimum_required(VERSION 3.0)
project(KFilter VERSION 0.1.0)

find_package (Eigen3 REQUIRED NO_MODULE)
add_library(KFilter KFilter.cpp)
target_link_libraries(KFilter Eigen3::Eigen)

这在我的Mac上可以正常运行,但是在Travis CI中,它会出现以下错误:

CMake Error at CMakeLists.txt:5 (add_library):
  Target "KFilter" links to target "Eigen3::Eigen" but the target was not
  found.  Perhaps a find_package() call is missing for an IMPORTED target, or
  an ALIAS target is missing?

当find_package似乎成功时,为什么在第5行会出现此错误?我正在遵循Eigen网站上的this指南。

Travis CI正在使用CMake 3.12和Eigen3 debian软件包运行Ubuntu 16.04,而我的Mac正在通过自制软件安装Eigen的情况下运行CMake 3.13。我真的很困惑为什么CMake会有不同的表现。

2 个答案:

答案 0 :(得分:2)

您不会提及每种情况下使用的Eigen3版本。

好像在Eigen3 3.2和3.3之间,它已从使用Code: InvalidAuthenticationToken Message: CompactToken validation failed with reason code: 80049228 更改为FindEigen3.cmake。这改变了将Eigen3包含到项目中的方式,并在3.3中使用了Eigen3Config.cmake

但是事实证明,在Ubuntu 16.04上,该软件包是Eigen3::Eigen3,而3.3 beta版本并未导出libeigen3-dev (3.3~beta1-2),而是包含:

Eigen3::Eigen3

所以只需删除add_definitions ( ${EIGEN3_DEFINITIONS} ) include_directories ( ${EIGEN3_INCLUDE_DIRS} ) ,就可以了。

答案 1 :(得分:0)

使用Ubuntu 16.04对我有用的是删除target_link_libraries(KFilter Eigen3::Eigen)并在源文件中更改以下行#include <eigen3/Eigen/Dense>