| # SPDX-FileCopyrightText: The Eigen Authors |
| # SPDX-License-Identifier: MPL-2.0 |
| |
| # Consumes an installed Eigen exactly the way doc/TopicCMakeGuide.dox opens: |
| # find_package plus target_link_libraries against Eigen3::Eigen. |
| # EIGEN_VERSION_SPEC carries the optional version argument so one project can |
| # stand in for the plain, ranged, and rejected forms the guide documents. |
| |
| cmake_minimum_required(VERSION 3.17) |
| project(eigen_installed_consumer CXX) |
| |
| find_package(Eigen3 ${EIGEN_VERSION_SPEC} REQUIRED NO_MODULE) |
| |
| # Prove the package came from the install tree the scenario built. Eigen calls |
| # export(PACKAGE Eigen3), so an unrelated build tree recorded in CMake's user |
| # package registry can satisfy find_package and leave the scenario asserting |
| # nothing about what it installed. |
| if(EIGEN_EXPECTED_PREFIX) |
| get_filename_component(eigen_found_dir "${Eigen3_DIR}" REALPATH) |
| get_filename_component(eigen_expected_prefix "${EIGEN_EXPECTED_PREFIX}" REALPATH) |
| string(FIND "${eigen_found_dir}" "${eigen_expected_prefix}/" eigen_prefix_position) |
| if(NOT eigen_prefix_position EQUAL 0) |
| message(FATAL_ERROR |
| "found Eigen3 at ${eigen_found_dir}, expected it under ${eigen_expected_prefix}") |
| endif() |
| endif() |
| |
| add_executable(consumer ../main.cpp) |
| target_link_libraries(consumer Eigen3::Eigen) |