【问题标题】:Instruct CMake to choose right version for multiple Boost installation指示 CMake 为多个 Boost 安装选择正确的版本
【发布时间】:2015-10-19 06:04:19
【问题描述】:

我使用的是 Ubuntu 12.04。我的系统提供 Boost 1.46。由于我必须使用 boost lockfree 队列,我尝试从官方 Boost 网站安装 1.59。因此,我实际上安装了 2 个版本的 boost。系统默认安装在 /usr/ 和版本 1.59 安装在 /usr/local。

我有一个使用 cmake 的代码库。这是一个相当大的代码库。我怀疑 CMake 仍在查看 1.46 版。我应该修复它以在 /usr/local 中查看 1.59 版吗?

我的 CMakeFiles(仅相关部分):

find_package(Boost 1.59 EXACT REQUIRED COMPONENTS system thread date_time)
include_directories(${Boost_INCLUDE_DIRS})
find_package(Threads REQUIRED)

target_link_libraries( hello_node
                       ${Boost_THREAD_LIBRARY}
                       ${catkin_LIBRARIES}
                       boost_system
                       boost_thread
                       rt
                       boost_date_time
)

target_link_libraries( dgem
                       ${Boost_THREAD_LIBRARY}
                       ${catkin_LIBRARIES}
                       boost_system
                       boost_thread
                       rt
                       boost_date_time
)

有了这个,cmake 似乎使用 /usr/include (即旧版本的 boost)。

【问题讨论】:

  • 通过在 CMakeLists.txt 中添加消息来检查找到了哪个 boost 版本
  • @MertMertce:为什么要添加消息?它由 FindBoost 自己打印。看输出就够了。

标签: boost cmake


【解决方案1】:

您可以通过查看配置输出或构建目录中的 CMakeCache.txt 文件来检查找到了哪个 boost。配置输出告诉您它找到 Boost 的路径。在 CMakeCache.txt 文件中,您可以搜索 BOOST_LIB* 或 BOOST_INCLUDE* 并且您应该获得库/头文件的路径。这将有助于识别版本。

如果你想指定你的两个 Boost 安装中的一个,你可以通过 BOOST_ROOT 传递 CMake 到你的 Boost 的根目录。这看起来像

cmake -DBOOST_ROOT=/usr/local/boost_1.59 <otherstuff>

【讨论】:

  • 似乎 -DBOOST_ROOT 解决了这个问题。您能否更新答案以将其设置到 CMakeFile.txt 中。
  • 这并不意味着在您的 CMakeLists.txt 中。可能有很多人安装了正确版本的 Boost。他们很好,CMake 会找到他们的 Boost 安装。只是您有多个 Boost 安装,因此您必须修改 CMake 尝试查找 Boost 的方式。如果您是唯一的用户,请在find_package(Boost ...) 之前添加set(BOOST_ROOT "/usr/local/bost_1.59") 一行。
【解决方案2】:

从documentation 开始,FindBoost 模块将版本作为参数以及另一个名为EXACT 的参数。除非您设置后者,否则前者旨在作为最低版本,并且在您的系统中找到更大的版本对于 cmake 来说很好。

现在取决于它是否适合您的项目。我不能这么说。

【讨论】:

  • /usr/local/share/cmake-3.2/Modules/FindBoost.cmake:1182 处的 CMake 错误(消息):无法找到请求的 Boost 库。 Boost 版本:1.46.1 Boost 包含路径:/usr/include 检测到的 Boost 版本太旧。请求的版本是 1.59。
  • 好像我的cmake找不到我安装的最新版本。我该如何解决?
  • @mkuse 也来自文档:“BOOST_ROOT - 首选安装前缀”。所以将其设置为例如"/usr/local" 在搜索 Boost 之前?
  • 至少,给我们看看你的 cmake 文件,让我们知道 boost lib 依赖的地方,否则我们无法提供帮助......
  • 好吧,把它放在那里并删除 EXACT,从而在您的系统中安装这样的版本或更高版本,并相应地设置 BOOST_ROOT 参数。怎么了?你读过文档吗?
【解决方案3】:

我直接打开了CMakeCache.txt文件,在Boost_INCLUDE_DIR中输入了boost本地安装的位置,这是我一个项目需要的,避免干扰/usr/local中的mu常用安装。这样效果很好,避免了麻烦

【讨论】:

  • 但这很烦人,而且只对自己有用。
猜你喜欢
  • 2018-09-28
  • 1970-01-01
  • 1970-01-01
  • 2012-11-08
  • 1970-01-01
  • 1970-01-01
  • 2018-05-17
  • 2023-03-31
  • 1970-01-01
相关资源
最近更新 更多