【问题标题】:boost & asio as part in big project with Cmakeboost & asio 作为 Cmake 大项目的一部分
【发布时间】:2011-02-22 19:00:42
【问题描述】:

我想在使用 Cmake 构建的大型跨平台项目中使用 Boost 核心库(如 lambda)和 Boost ASIO 库。我想将 Boost & ASIO 放在我的源代码控制树中,并将其作为 Cmake 项目的一部分进行构建。所以我不想在电脑上“安装”它并与之链接。

如何做到这一点? Boost 是否存在CMakeLists.txt

【问题讨论】:

    标签: c++ boost cmake boost-asio


    【解决方案1】:

    Boost.Lambda 和 Boost.ASIO 都是仅包含标头的库,因此在您的 CMakeLists.txt 文件中,您可以在 INCLUDE_DIRECTORIES 变量中包含您的 Boost include 目录,并且在构建代码时,标头代码将内置到生成的模块中。

    对于您使用非仅包含头文件的库(如 Boost.Filesystem)的情况,您将不得不发布您构建的库,或修改 boost.build 的实验 CMake 版本,您可以在此处找到:@ 987654321@

    编辑

    我对 Boost.Asio 有点困惑。它不是真正的仅头文件,因为它依赖于 Boost.System,并且可能依赖于 Boost.Thread,具体取决于您如何使用它。

    但是,Boost.Asio 是从 Asio (http://think-async.com/) 派生的,它是仅标头。

    【讨论】:

    • 所以对于只有标题的库,我只是拖动标题,而不对它们进行任何更改(即 autotools、configure、m4,不需要这样的东西)?
    • @zaharpopov - 是的,对于仅头文件的库,所有代码都在头文件中提供(例如,查看头文件中的任何 boost 智能指针)。当您执行整个 #include <boost/shared_ptr.hpp> 之类的操作时,这些头文件中的代码将包含在您的编译中,因此您不必链接外部库。并非所有 Boost 库都是仅头文件,但许多常见的库是.有关仅标头库的更多信息:en.wikipedia.org/wiki/Header-only
    • @zaharpopov,我已经修改了关于 ASIO 的帖子。
    【解决方案2】:

    有一个项目旨在提供 CMake 版本的 boost。它已经过时了,但CMakeLists.txt 可能会对您有所帮助。您可以查看there

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-27
      • 2017-04-29
      • 1970-01-01
      • 2014-07-25
      • 1970-01-01
      • 2021-05-06
      • 2018-02-26
      • 2018-10-31
      相关资源
      最近更新 更多