CMake find_package()Eclipse,OS X.

时间:2014-02-21 00:41:24

标签: cmake libraries

我设法在Eclipse中创建Make Target并将一个CMakeListst.txt添加到一个非常简单的项目中并且它有效。

现在,我的下一步是使用两个外部库,Boost和Eigen。

我的项目位于/Users/MyUser/Documents/workspace/Test 这些库是/Users/MyUser/Documents/MyLib/Libraries

现在,在CMakeLists.txt文件中,我尝试找到Boost和Eigen,它们位于libraries文件夹中,但始终返回的消息是

  

CMake / TPLs / FindBoost.cmake上的CMake错误:1126(消息):无法   找到请求的Boost库。

     

无法找到Boost头文件。请将BOOST_ROOT设置为   根目录包含Boost或BOOST_INCLUDEDIR到目录   包含Boost的标题。呼叫堆栈(最近一次呼叫):
  CMakeLists.txt:23(FIND_PACKAGE)

     

- 配置不完整,发生错误! / Applications / CMake处的CMake错误   2.8-11.app/Contents/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:108   (消息):找不到Eigen3(缺少:EIGEN3_INCLUDE_DIRS   EIGEN3_VERSION_OK)(必需至少为版本“2.91.0”)调用   堆栈(最近一次呼叫):/ Applications / CMake   2.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的包?

BTW我在Mac OS X Mavericks下工作。

修改

通过文件FindEigen3.cmake读取应该有一个名为EIGEN3_INCLUDE_DIRS的变量指向Eigen的include目录,这是真的吗?

现在,从以下消息

Could NOT find Eigen3 (missing: EIGEN3_INCLUDE_DIRS EIGEN3_VERSION_OK)

我认为cmake实际上找到的目录是 EIGEN3_VERSION_OK ,但是为什么cmake无法找到其余的包含文件?

我还缺少什么吗?我在Eclipse中创建了环境变量,然后在FindEigen3.cmake中添加一行来测试环境变量的值EIGEN3_INCLUDE_DIRS

message(STATUS "Eigen version: ${EIGEN3_INCLUDE_DIRS}")

但我得到的信息是

--Eigen version: EIGEN3_INCLUDE_DIRS-NOTFOUND

有任何建议吗?

修改

我尝试了与问题相关的答案,但没有人能够使Eclipse + CMake找到Boost和Eigen库。我想这里的问题是如何使Eclipse识别系统变量。

1 个答案:

答案 0 :(得分:0)

如果您不相信在Eclipse中设置环境变量,可以直接将Cmake-defined传递给cmake命令:

cmake -E chdir Release/ cmake -G "Unix Makefiles" ... -DBOOST_ROOT:PATHNAME=boost/install/dir ...

或在找到boost / eigen3

之前在CMakeLists.txt中定义它们
SET(BOOST_ROOT boost/install/dir)
...
FIND_PACKAGE(BOOST ... )

或在OS / shell中使用环境变量。您必须在启动Eclipse之前定义它们。例如。来自bash,做

export BOOST_ROOT=boost/install/dir
eclipse

请注意,您必须定义boost和eigen3所需的所有变量。您可以在CMakeLists.txt中放置一些debugging messages以确认您是否正确传递了它们:

MESSAGE("Boost root: ${BOOST_ROOT}")