![]() |
Eigen
5.0.1
|
Eigen provides native CMake support which allows the library to be easily used in CMake projects.
Eigen3Config.cmake imposes no version floor of its own, so a project consuming an already-installed Eigen may use an older CMake; the Using FetchContent route below adds Eigen's own build to your project and so requires 3.18 as well.Eigen exports a CMake target called Eigen3::Eigen which can be imported using the find_package CMake command and used by calling target_link_libraries as in the following example:
The above code snippet must be placed in a file called CMakeLists.txt alongside example.cpp. After running
CMake will produce project files that generate an executable called example. Here, path-to-example-directory is the path to the directory that contains both CMakeLists.txt and example.cpp. Note that if you have multiple instances of Eigen installed, find_package will use the first one encountered. To request a specific version of Eigen, use the <version> option in find_package:
Starting with Eigen 3.4.1, we also support a range spanning major versions:
find_package syntax introduced in CMake 3.19. Older CMake passes 3.4...5 through as a single version string, which Eigen3ConfigVersion.cmake cannot parse and therefore rejects.Do not forget to set the CMAKE_PREFIX_PATH variable if Eigen is not installed in a default location or if you want to pick a specific version. For instance:
An alternative is to set the Eigen3_DIR cmake's variable to the respective path containing the Eigen3*.cmake files. For instance:
If the REQUIRED option is omitted when locating Eigen using find_package, one can check whether the package was found as follows:
You can use the FetchContent module to download and include Eigen directly in your project without installing it first. This adds Eigen's own build to your project, so it requires CMake 3.18 rather than the 3.11 that introduced FetchContent.
A basic example:
When Eigen is added as a sub-project, its documentation, testing, and pkg-config targets may collide with your project's own targets. Disable them before calling FetchContent_MakeAvailable:
Eigen's install rules are enabled even when it is built as a sub-project, so that a project embedding Eigen can ship it as part of its own package. If your project does not want Eigen's headers to land in CMAKE_INSTALL_PREFIX (or in a CPack package), set EIGEN_INSTALL to OFF:
Eigen then places no file at all under CMAKE_INSTALL_PREFIX, the generated documentation included.
install(EXPORT ...) whose targets link a target that no installed export set provides. So if you export your own targets and their public interface links Eigen3::Eigen, you must either leave EIGEN_INSTALL on and install Eigen's CMake package alongside them, or consume Eigen through find_package instead of embedding it.Projects that depend on Eigen should typically exclude installing Eigen by default to avoid overwriting a previous installation. Passing EXCLUDE_FROM_ALL to add_subdirectory drops Eigen's install rules, and in addition keeps Eigen's targets out of the default build. That form works on every CMake version Eigen supports:
FetchContent_Declare accepts the same keyword, but only from CMake 3.28 onwards, so a project using it has to say so:
EXCLUDE_FROM_ALL in FetchContent_Declare without complaint and ignore it, so Eigen is installed anyway. Below 3.28, use EIGEN_INSTALL or the add_subdirectory form.CMake 3.30 changed the default value of the CMP0168 policy so that FetchContent_Declare uses FetchContent_Populate internally with a different sub-build strategy. If you encounter issues with sub-builds you can either upgrade to a compatible Eigen version or set the policy explicitly: