Austin Schuh | 189376f | 2018-12-20 22:11:15 +1100 | [diff] [blame] | 1 | namespace Eigen { |
| 2 | |
| 3 | /** |
| 4 | |
| 5 | \page TopicCMakeGuide Using %Eigen in CMake Projects |
| 6 | |
| 7 | %Eigen provides native CMake support which allows the library to be easily |
| 8 | used in CMake projects. |
| 9 | |
| 10 | \note %CMake 3.0 (or later) is required to enable this functionality. |
| 11 | |
| 12 | %Eigen exports a CMake target called `Eigen3::Eigen` which can be imported |
| 13 | using the `find_package` CMake command and used by calling |
| 14 | `target_link_libraries` as in the following example: |
| 15 | \code{.cmake} |
| 16 | cmake_minimum_required (VERSION 3.0) |
| 17 | project (myproject) |
| 18 | |
| 19 | find_package (Eigen3 3.3 REQUIRED NO_MODULE) |
| 20 | |
| 21 | add_executable (example example.cpp) |
| 22 | target_link_libraries (example Eigen3::Eigen) |
| 23 | \endcode |
| 24 | |
| 25 | The above code snippet must be placed in a file called `CMakeLists.txt` alongside |
| 26 | `example.cpp`. After running |
| 27 | \code{.sh} |
| 28 | $ cmake path-to-example-directory |
| 29 | \endcode |
| 30 | CMake will produce project files that generate an executable called `example` |
| 31 | which requires at least version 3.3 of %Eigen. Here, `path-to-example-directory` |
| 32 | is the path to the directory that contains both `CMakeLists.txt` and |
| 33 | `example.cpp`. |
| 34 | |
| 35 | If you have multiple installed version of %Eigen, you can pick your favorite one by setting the \c Eigen3_DIR cmake's variable to the respective path containing the \c Eigen3*.cmake files. For instance: |
| 36 | \code |
| 37 | cmake path-to-example-directory -DEigen3_DIR=$HOME/mypackages/share/eigen3/cmake/ |
| 38 | \endcode |
| 39 | |
| 40 | If the `REQUIRED` option is omitted when locating %Eigen using |
| 41 | `find_package`, one can check whether the package was found as follows: |
| 42 | \code{.cmake} |
| 43 | find_package (Eigen3 3.3 NO_MODULE) |
| 44 | |
| 45 | if (TARGET Eigen3::Eigen) |
| 46 | # Use the imported target |
| 47 | endif (TARGET Eigen3::Eigen) |
| 48 | \endcode |
| 49 | |
| 50 | */ |
| 51 | |
| 52 | } |