drake - 使用 cmake 从源代码构建 Drake 时的问题
问题描述
我正在尝试从源代码构建和安装 Drake,以获得对 Mosek 的支持。然而,我总是遇到麻烦。作为记录,我正在运行 macOS Catalina。
现在我的方法是这样的:
- 将 github 中的 drake 克隆到我计算机上的某个位置(来自https://github.com/RobotLocomotion/drake.git)
- 安装先决条件
./setup/mac/install_prereqs.sh
- 运行
bazel build //...
创建一个名为build
andcd build
cmake ..
然后make
的目录make install
- 在我使用 cmake 构建的 C++ 项目中,我将其添加到 CMakeLists.txt:
link_directories(drakelocation/build/install/lib)
include_directories(drakelocation/build/install/include)
但是,当我尝试构建我的项目时,我收到 Drake 无法找到 Eigen: 的错误'Eigen/Core' file not found
。我能够通过添加来解决这个问题:
target_link_libraries(my_lib Eigen3::Eigen)
到我的 CMakeLists.txt
我觉得这有点奇怪,因为我希望 Drake 在构建时包含 Eigen,但至少这让我能够更进一步。
在此之后,我收到一堆类型的消息:
no member named 'signbit' in the global namespace
即,Drake 似乎突然失去了所有标准 C++ 库。我还没有能够解决这个问题,所以这是我目前卡住的地方。
您有什么建议,或者您之前遇到过类似的问题吗?
其他信息:
- 使用
find_package(drake)
根本不适用于我当前的方法(cmake 无法找到 drake-config.cmake)。我在这里遗漏了完成这项工作所需的东西吗?cmake 期望在哪里安装库,我如何在那个地方安装它们? - 我也试过跳过整个
bazel build //...
步骤,直接进入cmake ..
步骤,这似乎没有任何区别。 - 在我运行的每一种不同的构建方法之间
bazel clean --expunge
,以确保没有任何东西从前一次运行中遗留下来。
谢谢!
解决方案
感谢@Jamie 解决了我遇到的 find_package() 问题。
我仍然在构建方面遇到了一些问题。原来我的默认 SDK 路径有问题,并且根据以下设置“CMAKE_OSX_SYSROOT”:Catalina C++: Using <cmath> headers yield error: no member named 'signbit' in the global namespace after an update to XCode did诀窍。
在此之后,我从 Eigen 收到了很多奇怪的错误消息,抱怨 ieMatrixXd
没有在命名空间“Eigen”中定义。出于某种原因,卸载它,brew uninstall eigen
然后从源代码下载和构建 eigen 解决了这些问题。
现在可以了!