cmake - CMake find_package 不适用于本征?
问题描述
我目前正在使用 Eigen 开发一个卡尔曼滤波库,并且我已经成功地让它在我的开发 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 网站上的本指南。
Travis CI 正在运行带有 CMake 3.12 和 Eigen3 debian 软件包的 Ubuntu 16.04,而我的 Mac 正在运行带有通过自制软件安装的 Eigen 的 CMake 3.13。我真的很困惑为什么 CMake 的行为不同。
解决方案
您没有提到在每种情况下都使用了哪个版本的 Eigen3。
看起来在 Eigen3 3.2 和 3.3 之间它从 usingFindEigen3.cmake
变为Eigen3Config.cmake
. 这改变了如何将 Eigen3 包含到项目中,并在 3.3 中使用Eigen3::Eigen3
.
但事实证明,在 Ubuntu 16.04 上,该软件包是libeigen3-dev (3.3~beta1-2)
并且 3.3 beta 版本没有导出Eigen3::Eigen3
,而是包含:
add_definitions ( ${EIGEN3_DEFINITIONS} )
include_directories ( ${EIGEN3_INCLUDE_DIRS} )
所以只需删除target_link_libraries(KFilter Eigen3::Eigen)
它应该没问题。
推荐阅读
- php - 搜索任何表字段中是否存在变量并获取表字段名称
- php - 使用数据库值的 Smarty 计算
- r - 使用 grepl() 从 R 中的数据框中删除值
- java - 如何处理 RequestMapping 中的@Valid 违规行为?
- python - 用于股票市场预测、回归的卷积神经网络
- excel - 从 Excel 电子表格中删除一些图片
- c# - Parent类方法如何订阅子类Event?
- love2d - windows上是否有love2d的分辨率处理库
- html - 从类选择传递数据以获取路线
- javascript - Google Maps API KMZ 文件在点击事件中显示错误数据