In Eigen library's official cmake doc, it requires the line target_link_libraries (example Eigen3::Eigen)
. I have tried removing that line, but then the compilation would fail with "Eigen not found".
This directly contradicts the discussion in another StackOverflow question: Using Eigen Lib in my Cmake project?
I don't understand why Eigen would need target_link_libraries
even though it's a template-only library? Just like the above StackOverflow question, I'd assume I only have to include the Eigen headers (include_directories()
) and it should work out of the box. It doesn't.
Ah now I know what's going on: there's a concept called "interface library" in CMake that doesn't actually build a library binary. It is designed precisely for template-only libraries like Eigen.
References: - https://cmake.org/cmake/help/latest/command/add_library.html#interface-libraries - http://mariobadr.com/creating-a-header-only-library-with-cmake.html
Hope this helps other souls struggling with cmake!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With