我成功地在Eclipse中创建了MakeTarget
,并添加了一个CMakeListst。txt转换为一个非常简单的项目,并成功了。
现在,我的下一步是使用两个外部库,Boost和Eigen。
我的项目在/用户/MyUser/文档/工作区/测试
库是/用户/MyUser/文档/MyLib/库
现在,在CMakeLists.txt
文件中,我尝试找到Boost和Eigen,它们位于库文件夹中,但返回的消息总是
CMake/TPL/FindBoost.cmake:1126的CMake错误(消息):无法找到请求的Boost库。
找不到Boost头文件。请将BOOST_ROOT设置到包含Boost的根目录,或BOOST_INCLUDEDIR到包含Boost头文件的目录。调用堆栈(最近的调用优先):
CMakeLists.txt:23(FIND_PACKAGE)
-配置不完整,发生错误!CMake错误在 /Applications/CMake2.8-11.app/Contents/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake: 108(消息):找不到Eigen3(缺少:EIGEN3_INCLUDE_DIRSEIGEN3_VERSION_OK)(需要的是至少版本2.91.0)调用堆栈(最近调用优先): /Applications/CMake2.8-11.app/Contents/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:315(_FPHSA_FAILURE_MESSAGE)CMake/TPLs/FindEigen3.cmake:76(find_package_handle_standard_args)CMakeLists.txt:30(FIND_PACKAGE)
我是 CMake 的新手,所以我一定缺少一些告诉 CMake 在我的库文件夹中进行搜索的方法。如何在构建项目时使用 CMake 查找包?
顺便说一句,我正在Mac OS X小牛队下工作。
编辑
通读文件< code > findegen 3 . cmake 应该有一个名为< code>EIGEN3_INCLUDE_DIRS的变量指向Eigen的INCLUDE目录,这是真的吗?
现在,从以下消息
找不到Eigen3(缺少:EIGEN3_INCLUDE_DIRSEIGEN3_VERSION_OK)
我认为cmake实际上正在查找该目录,就像它所说的那样EIGEN3_VERSION_OK但是为什么cmake找不到其余的包含文件呢?
我还缺少什么吗?我在Eclipse中创建了环境变量,然后在FindEigen3.cmake
中添加一行来测试环境变量的值EIGEN3_INCLUDE_DIRS
消息(STATUS"Eigen version:${EIGEN3_INCLUDE_DIRS}")
但我得到的信息是
< code >-Eigen version:EIG EN3 _包含_ DIRS-未找到
有什么建议吗?
编辑
我尝试了与问题相关的答案,但没有一个能够让EclipseCMake找到Boost和Eigen库。我想这里的问题是如何让Eclipse识别系统变量。
当您不相信在Eclipse中设置环境变量时,可以将Cmake定义直接传递给Cmake命令:
cmake -E chdir Release/ cmake -G "Unix Makefiles" ... -DBOOST_ROOT:PATHNAME=boost/install/dir ...
或者在CMakeLists.txt之前定义它们
SET(BOOST_ROOT boost/install/dir)
...
FIND_PACKAGE(BOOST ... )
或者在OS/shell中使用环境变量。您必须在启动Eclipse之前定义它们。例如来自密苏里州巴什的
export BOOST_ROOT=boost/install/dir
eclipse
请注意,您必须定义 boost 和 eigen3 所需的所有变量。您可以在 CMakeLists 中放置一些调试消息.txt以确认是否正确传递了这些消息:
MESSAGE("Boost root: ${BOOST_ROOT}")