eigen.cmake 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. if(TARGET Eigen3::Eigen)
  2. return()
  3. endif()
  4. message(STATUS "Third-party: creating target 'Eigen3::Eigen'")
  5. include(FetchContent)
  6. FetchContent_Declare(
  7. eigen
  8. GIT_REPOSITORY https://gitlab.com/libeigen/eigen.git
  9. GIT_TAG tags/3.4.0
  10. GIT_SHALLOW TRUE
  11. )
  12. FetchContent_GetProperties(eigen)
  13. if(NOT eigen_POPULATED)
  14. FetchContent_Populate(eigen)
  15. endif()
  16. add_library(Eigen3_Eigen INTERFACE)
  17. add_library(Eigen3::Eigen ALIAS Eigen3_Eigen)
  18. include(GNUInstallDirs)
  19. target_include_directories(Eigen3_Eigen SYSTEM INTERFACE
  20. $<BUILD_INTERFACE:${eigen_SOURCE_DIR}>
  21. $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
  22. )
  23. option(EIGEN_MPL2_ONLY "Compile Eigen with MPL2 code only" OFF)
  24. if(EIGEN_MPL2_ONLY)
  25. target_compile_definitions(Eigen3_Eigen INTERFACE EIGEN_MPL2_ONLY)
  26. endif()
  27. # On Windows, enable natvis files to improve debugging experience
  28. if(WIN32 AND eigen_SOURCE_DIR)
  29. target_sources(Eigen3_Eigen INTERFACE $<BUILD_INTERFACE:${eigen_SOURCE_DIR}/debug/msvc/eigen.natvis>)
  30. endif()
  31. # Install rules
  32. set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME eigen)
  33. set_target_properties(Eigen3_Eigen PROPERTIES EXPORT_NAME Eigen)
  34. install(DIRECTORY ${eigen_SOURCE_DIR}/Eigen DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
  35. install(TARGETS Eigen3_Eigen EXPORT EigenTargets)
  36. install(EXPORT EigenTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/eigen NAMESPACE Eigen3::)