Eigen cmake 需要 "target_link_libraries",即使它是 template-only
Eigen cmake requires "target_link_libraries" even though it's template-only
在 Eigen 库的 official cmake doc 中,它需要行 target_link_libraries (example Eigen3::Eigen)
。我曾尝试删除该行,但随后编译将失败并显示 "Eigen not found"。
这与另一个 Whosebug 问题中的讨论直接矛盾:Using Eigen Lib in my Cmake project?
我不明白为什么 Eigen 需要 target_link_libraries
,即使它是一个 template-only 库?就像上面的 Whosebug 问题一样,我假设我只需要包含 Eigen headers (include_directories()
) 并且它应该开箱即用。它没有。
啊,现在我知道是怎么回事了:CMake 中有一个叫做 "interface library" 的概念,它实际上并不构建库二进制文件。它专为像 Eigen 这样的纯模板库而设计。
参考资料:
- https://cmake.org/cmake/help/latest/command/add_library.html#interface-libraries
- http://mariobadr.com/creating-a-header-only-library-with-cmake.html
希望这能帮助其他在 cmake 上苦苦挣扎的人!
在 Eigen 库的 official cmake doc 中,它需要行 target_link_libraries (example Eigen3::Eigen)
。我曾尝试删除该行,但随后编译将失败并显示 "Eigen not found"。
这与另一个 Whosebug 问题中的讨论直接矛盾:Using Eigen Lib in my Cmake project?
我不明白为什么 Eigen 需要 target_link_libraries
,即使它是一个 template-only 库?就像上面的 Whosebug 问题一样,我假设我只需要包含 Eigen headers (include_directories()
) 并且它应该开箱即用。它没有。
啊,现在我知道是怎么回事了:CMake 中有一个叫做 "interface library" 的概念,它实际上并不构建库二进制文件。它专为像 Eigen 这样的纯模板库而设计。
参考资料: - https://cmake.org/cmake/help/latest/command/add_library.html#interface-libraries - http://mariobadr.com/creating-a-header-only-library-with-cmake.html
希望这能帮助其他在 cmake 上苦苦挣扎的人!