C++ cmake Eigen查找包提示
我需要添加到我们的一个项目中。 由于Eigen只是头文件,所以我们决定将它直接放在源代码目录中,用Git跟踪它,并确保在克隆存储库时一切就绪。 因此,我们从下载了Eigen,并将其放在项目目录中的目录C++ cmake Eigen查找包提示,c++,cmake,eigen,C++,Cmake,Eigen,我需要添加到我们的一个项目中。 由于Eigen只是头文件,所以我们决定将它直接放在源代码目录中,用Git跟踪它,并确保在克隆存储库时一切就绪。 因此,我们从下载了Eigen,并将其放在项目目录中的目录Eigen 我们正在本项目中使用cmake。 我可以使用以下代码包含Eigen: find_package(Eigen3 REQUIRED) if (Eigen3_FOUND) message("Eigen found") message(" Eigen location: ${E
Eigen
我们正在本项目中使用cmake
。
我可以使用以下代码包含Eigen:
find_package(Eigen3 REQUIRED)
if (Eigen3_FOUND)
message("Eigen found")
message(" Eigen location: ${Eigen3_DIR}")
message(" Eigen Version: ${Eigen3_VERSION}")
target_link_libraries (ourProject Eigen3::Eigen)
endif ()
但是,此代码确实在/usr/local/share/eigen3/cmake
中找到了不同的Eigen版本
我希望它使用位于源代码目录中的Eigen版本。
因此,我尝试使用
提示
选项:
find_package(Eigen3 REQUIRED HINTS ./EIGEN)
但它不起作用。
我的主要问题是,我不知道我必须在提示中写入哪条路径。
EIGEN目录包含多个其他文件夹。我试了一些,但没有成功:
find_package(Eigen3 REQUIRED HINTS ./EIGEN/Eigen)
find_package(Eigen3 REQUIRED HINTS ./EIGEN/Eigen/src)
find_package(Eigen3 REQUIRED HINTS ./EIGEN/cmake)...
什么是确保cmake使用我想要的Eigen版本的正确方法 与评论中提到的squareskittles一样,您应该调用
add_subdirectory()
,并在源代码树中指定Eigen3的位置。这样,您就不需要调用find_package()
,只要您只使用Eigen3::Eigen
目标,因为这将由Eigen3 CMake脚本添加
因此,如果您有以下源代码树:
- foo/
- CMakeLists.txt # Top-level CMakeLists file
- eigen/ # Cloned Eigen repo
- CMakeLists.txt
- ...
- foo.cpp
- foo.hpp
您的foo/CMakeLists.txt应包含:
add_subdirectory(eigen)
但是要小心,例如,如果不调用find\u package()
-Eigen3\u VERSION和Eigen3\u INCLUDE\u DIR,可能无法设置某些CMake变量。如果您决定调用find_package()
来获取这些,则不需要给它一个提示参数,并且可以提供CONFIG或NO_模块直接进入配置模式
然后,CMake将搜索一个特征3Config.CMake,而不是将在特征构建树中生成的FindEigen3.CMake。您是否考虑过使用
添加子目录(Eigen)
查找特征回购?“因此,我尝试使用提示选项……但它不起作用。”-描述“它不起作用”不是很有帮助。您在这次尝试中观察到了什么?是查找包的结果没有更改?还是CMake发出了错误?@Tsyvarev它不会更改所选的本征版本。如果通过添加子目录()添加本征,它总是选择/usr/local/share/eigen3/CMake
版本
,本征源基本上是您当前项目(以及当前CMake调用)的一部分,本征目标/变量可以正确引用。在这种情况下,您不需要find\u package()
完全正确吗?@squareskittles您确实正确。无论您是否调用find_package()
,都将添加Eigen3::Eigen
目标。但是在“非现代”中“CMake在我们使用include\u directories
和_include\u DIR的地方,这不起作用,因为在根据我目前看到的处理*Config.CMake文件之前,不会添加此变量。我将编辑答案。@Pesho\T我试图使用add\u subdirectoy()
,但没有成功。我试过这样做:add_子目录(EIGEN/EIGEN)
并得到以下错误消息:在EIGEN/EIGEN/CMakeLists.txt:1(include):include找不到加载文件:RegexUtils…@user7431005您是否有一个与您添加的CMakeLists.txt文件相同目录级别的EIGEN目录add_子目录()
to,它是否包含包含CMakeLists.txt文件的本征目录?检查一下有问题的命令和我的最新编辑,希望这足以让你去。