首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >停靠容器中的eigen3 cmake错误

停靠容器中的eigen3 cmake错误
EN

Stack Overflow用户
提问于 2021-07-16 04:37:40
回答 1查看 135关注 0票数 0

我正在尝试构建一个ROS2包,我得到了这个错误

代码语言:javascript
运行
复制
CMake Error at /opt/ros/foxy/share/ament_cmake_target_dependencies/cmake/ament_target_dependencies.cmake:66 (message):
  ament_target_dependencies() the passed package name 'Eigen3::Eigen' was not
  found before
Call Stack (most recent call first):
  CMakeLists.txt:83 (ament_target_dependencies)

我正在尝试使用this来解决这个问题,但是我无法确定哪个是我的eigen3安装源文件夹。

我应该对我的CMakelist进行哪些更改?

Libeign3-dev已经是最新的版本(3.3.7-2)。

而且还

ros-foxy-eign3-cmake-module已经是最新的版本(0.1.1-1foal.20210423.000604)。

CMakelist:

代码语言:javascript
运行
复制
cmake_minimum_required(VERSION 3.5)
project(avoidance)

if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wpedantic")
endif()

find_package(ament_cmake REQUIRED)
find_package(builtin_interfaces REQUIRED)
find_package(perception_pcl REQUIRED)
find_package(rclcpp REQUIRED)
find_package(tf2 REQUIRED)

get_default_rmw_implementation(rmw_implementation)
find_package("${rmw_implementation}" REQUIRED)

find_package(geometry_msgs REQUIRED)
find_package(px4_msgs REQUIRED)
find_package(sensor_msgs REQUIRED)
find_package(std_msgs REQUIRED)

find_package(PythonInterp REQUIRED)
find_package(eigen3_cmake_module REQUIRED)
find_package(Eigen3 REQUIRED NO_MODULE)
find_package(Boost REQUIRED COMPONENTS system)
find_package(PCL REQUIRED)

if(DISABLE_SIMULATION)
  message(STATUS "Building avoidance without Gazebo Simulation")
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DDISABLE_SIMULATION")
else()
  message(STATUS "Building avoidance with Gazebo Simulation")
  find_package(yaml-cpp REQUIRED)
endif(DISABLE_SIMULATION)

#################
# Setup targets #
#################

## CMake Setup
# Build in Release mode if nothing is specified
if(NOT CMAKE_BUILD_TYPE)
    set(CMAKE_BUILD_TYPE Release)
endif(NOT CMAKE_BUILD_TYPE)

## Specify additional locations of header files
include_directories(
  include
  ${rclcpp_INCLUDE_DIRS}
  ${PCL_INCLUDE_DIRS}
  ${YAML_CPP_INCLUDE_DIR}
)

## Declare a C++ library
set(AVOIDANCE_CPP_FILES
  "src/common.cpp"
  "src/histogram.cpp"
  "src/transform_buffer.cpp"
  "src/avoidance_node.cpp"
)
if(NOT DISABLE_SIMULATION)
  set(AVOIDANCE_CPP_FILES "${AVOIDANCE_CPP_FILES}" "src/rviz_world_loader.cpp")
endif()

# Add avoidance lib
add_library(avoidance SHARED "${AVOIDANCE_CPP_FILES}")
ament_target_dependencies(avoidance Eigen3 px4_msgs ${${PROJECT_NAME}_EXPORTED_TARGETS})
target_include_directories(avoidance PUBLIC
  $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include/${PROJECT_NAME}>
  $<INSTALL_INTERFACE:include/${PROJECT_NAME}>
  ${Eigen3_INCLUDE_DIRS}
)

## Specify libraries to link a library or executable target against
target_link_libraries(
  avoidance
  Eigen3::Eigen
  ${YAML_CPP_LIBRARIES}
)

# Add node dependencies
ament_target_dependencies(avoidance px4_msgs rclcpp Eigen3::Eigen)

# Export information to downstream packages
ament_export_dependencies(ament_cmake rclcpp rosidl_default_runtime eigen3_cmake_module Eigen3 px4_msgs geometry_msgs sensor_msgs std_msgs)
ament_export_interfaces(export_avoidance HAS_LIBRARY_TARGET)
ament_export_include_directories(include)
ament_export_libraries(avoidance)

#############
## Install ##
#############

# Install header files
install(DIRECTORY include/${PROJECT_NAME}/
        DESTINATION include/${PROJECT_NAME}
        FILES_MATCHING PATTERN "*.h"
        PATTERN ".svn" EXCLUDE
)

# Install artifacts
install(TARGETS avoidance
        EXPORT export_avoidance
        ARCHIVE DESTINATION lib
        LIBRARY DESTINATION lib
        RUNTIME DESTINATION bin
        INCLUDES DESTINATION include
)

# Install launch files
install(DIRECTORY
        launch
        DESTINATION share/${PROJECT_NAME}
)

#############
## Testing ##
#############

# if(CATKIN_ENABLE_TESTING)
#     # Add gtest based cpp test target and link libraries
#     catkin_add_gtest(${PROJECT_NAME}-test test/main.cpp
#                                           test/test_common.cpp
#                                           test/test_usm.cpp
#                                           test/test_transform_buffer.cpp
#                     )
#
#     if(TARGET ${PROJECT_NAME}-test)
#       target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME}
#                                                  ${catkin_LIBRARIES}
#                                                  ${YAML_CPP_LIBRARIES})
#     endif()
#
#
#     if (${CMAKE_BUILD_TYPE} STREQUAL "Coverage")
#         SET(CMAKE_CXX_FLAGS "-g -O0 -fprofile-arcs -ftest-coverage --coverage")
#         SET(CMAKE_C_FLAGS "-g -O0 -fprofile-arcs -ftest-coverage --coverage")
#         SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage")
#
#         add_custom_target(${PROJECT_NAME}-test_coverage
#             COMMAND lcov --zerocounters --directory ${PROJECT_BINARY_DIR}
#             COMMAND lcov --capture  --initial --no-external --directory ${PROJECT_BINARY_DIR} --base-directory ${${PROJECT_NAME}_SOURCE_DIR} --output-file base_coverage.info --rc lcov_branch_coverage=1
#             COMMAND ${PROJECT_NAME}-test
#             COMMAND lcov --capture  --no-external --directory ${PROJECT_BINARY_DIR} --base-directory ${${PROJECT_NAME}_SOURCE_DIR} --output-file test_coverage.info --rc lcov_branch_coverage=1
#             COMMAND lcov -a base_coverage.info -a test_coverage.info -o coverage.info --rc lcov_branch_coverage=1
#             COMMAND lcov --rc lcov_branch_coverage=1 --summary coverage.info
#             WORKING_DIRECTORY .
#             DEPENDS ${PROJECT_NAME}-test
#         )
#         add_custom_target(${PROJECT_NAME}-test_coverage_html
#             COMMAND genhtml coverage.info --output-directory out --branch-coverage
#             COMMAND x-www-browser out/index.html
#             WORKING_DIRECTORY .
#             DEPENDS ${PROJECT_NAME}-test_coverage
#         )
#     endif()
# endif()

ament_package()
EN

回答 1

Stack Overflow用户

发布于 2021-07-16 19:08:53

看一下nav2_smac_planner/CMakeLists.txt

我发现您实际上在ament_target_dependencies中使用Eigen3而不是eigen3_cmake_module

在那里,他们还将其导出为ament_export_dependencies格式。

所以..。为了包含头部,您应该使用Eigen3,但是在依赖方面,应该使用eigen3_cmake_modules

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68400495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档