【问题标题】:Getting only necessary headers out of boost仅从 boost 中获取必要的标头
【发布时间】:2011-03-15 15:15:01
【问题描述】:

我需要提交一个作业,但我只想包含我实际使用的 boost 的头文件(我使用了 boost::shared_ptr 和 boost::function)。我尝试手动执行此操作,但我缺少一些头文件,每次我去添加它们时,结果发现我缺少更多。有没有一种快速简便的方法可以准确找出我真正需要的标头?

谢谢

【问题讨论】:

    标签: c++ boost


    【解决方案1】:

    bcp 命令是为此而制定的:

    名字

       bcp - extract subsets of Boost
    

    概要

       bcp --list [options] module-list
       bcp [options] module-list output-path
       bcp --report [options] module-list html-file
       bcp --help
    

    描述

       Copies all the files, including dependencies, found in module-list to
       output-path. output-path must be an existing path.
    

    但是您可能会惊讶地发现这些 Boost 标头是如何相互依赖的。

    【讨论】:

    • 我需要构建 bcp 吗?我只能在我的 boost 目录中找到它的源文件
    • 不知道。我的 Debian/Ubuntu 机器从 libboost1.42-dev 包中获得它。
    • 最近不得不在 Windows 上执行此操作 - 进入 tools\bcp 文件夹并输入“..\..\bjam.exe --toolset=msvc”
    • bcp 复制了太多东西。你会发现它复制 html 文件、教程、jpeg 和项目文件,供你们中的一些人穿着尿布时流行的编译器使用。
    • 我正在寻找是否可以使用它来提取 numeric_cast,但要么我做错了,要么依赖树很大。它列出了936个文件,其中853个是头文件。
    【解决方案2】:

    有一个名为 bcp 的工具可以做到这一点——复制出你需要的 Boost 部分,仅此而已。

    【讨论】:

      【解决方案3】:

      您的问题实际上还有另一种解决方案:预处理器。

      您使用的编译器应该有一个只运行预处理器的开关:-E 在 gcc 和 clang 上。鉴于此,您可以预处理您包含的两个文件,并将此运行的结果存储到您自己的头文件(每个)中。

      添加标头保护,包括已经预处理的标头代替常规的提升标头,您就完成了。

      当然,两个标题之间可能会有一些重复,差异工具可能会帮助您发现它并将其分解到另一个常见的标题中...但是对于分配,我当然不会打扰。

      您也可以考虑告诉您的老师,由于他没有要求您提供编译时使用的标准库头文件,因此他不应该要求您提供使用的 boost 头文件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-10
        • 1970-01-01
        • 2021-09-21
        相关资源
        最近更新 更多