@@ -62,18 +62,29 @@ else()
6262endif ()
6363
6464# Find packages
65- find_package (Eigen3 QUIET )
65+ find_package (Eigen3 3.4 QUIET NO_MODULE )
6666
67- # If Eigen3 is not found, download it
67+ # If Eigen3 is not found, fetch it and expose a proper Eigen3::Eigen target
6868if (NOT Eigen3_FOUND)
6969 message (STATUS "Eigen3 not found. Downloading..." )
7070 FetchContent_Declare (
7171 eigen
7272 GIT_REPOSITORY https://gitlab.com/libeigen/eigen.git
73- GIT_TAG 3.4.0 # Use a stable version
73+ GIT_TAG 3.4.0
7474 )
7575 FetchContent_MakeAvailable (eigen)
76- set (EIGEN3_INCLUDE_DIRS ${eigen_SOURCE_DIR} )
76+
77+ # Point Eigen3_DIR to the build directory where Eigen3Config.cmake is generated
78+ # so that downstream find_package(Eigen3) calls (e.g., from autodiff) can find it
79+ set (Eigen3_DIR "${eigen_BINARY_DIR} " CACHE PATH "Path to Eigen3Config.cmake" FORCE )
80+
81+ # Ensure Eigen3::Eigen target exists for direct usage
82+ if (NOT TARGET Eigen3::Eigen)
83+ add_library (Eigen3::Eigen INTERFACE IMPORTED )
84+ set_target_properties (Eigen3::Eigen PROPERTIES
85+ INTERFACE_INCLUDE_DIRECTORIES "${eigen_SOURCE_DIR} "
86+ )
87+ endif ()
7788endif ()
7889
7990if (CDDP_CPP_CASADI)
@@ -173,14 +184,10 @@ set_target_properties(${PROJECT_NAME} PROPERTIES POSITION_INDEPENDENT_CODE ON)
173184
174185target_link_libraries (${PROJECT_NAME}
175186 PUBLIC
176- $< IF :$< BOOL : ${Eigen3_FOUND} >, Eigen3 ::Eigen ,>
187+ Eigen3::Eigen
177188 autodiff
178189)
179190
180- if (NOT Eigen3_FOUND)
181- target_include_directories (${PROJECT_NAME} PUBLIC ${EIGEN3_INCLUDE_DIRS} )
182- endif ()
183-
184191target_include_directories (${PROJECT_NAME} PUBLIC
185192 $<BUILD_INTERFACE :${CMAKE_CURRENT_SOURCE_DIR} /include /cddp -cpp >
186193 $<INSTALL_INTERFACE :${CMAKE_INSTALL_INCLUDEDIR} >
0 commit comments