我目前正在使用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会有不同的表现。
答案 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>