【问题标题】:Include all of a template library in a file在文件中包含所有模板库
【发布时间】:2011-12-25 23:45:33
【问题描述】:

我在一些编码工作中也使用了一些模板库,如 Boost 和 Thrust(用于 CUDA)。

要使用 Boost 库的某个功能,必须包含适当的标头。例如对于boost::lexical_cast,我必须使用boost/lexical_cast.hpp。为我在项目中使用的 Boost / Thrust 的每个新功能都包含适当的标题是很累人的。

是否有任何“快捷方式”告诉预处理器包含存储在 boost 库下的所有头文件,这样我就不必担心要包含哪个头文件了?

我在 Ubuntu 下使用 GCC。

【问题讨论】:

    标签: c++ boost header


    【解决方案1】:

    你不想这样。您希望包含尽可能少的内容。编译时间在 C++ 中非常糟糕。开始将所有内容都包括在内,甚至会变得更糟。

    我一直在一个项目中工作,当时在一个体面的单核 CPU 上编译需要 50 分钟,链接 5-10 分钟。如果您在基础深处做模板工作,这会很痛苦。

    Boost 附带了一堆东西(例如 MPL),它们将编译器扩展到了极限。在任何地方都包含这些东西是很疯狂的(除了五个 cpp 文件的项目)。

    【讨论】:

      【解决方案2】:

      您可以像这样简单地制作一个万能的头文件:

      for i in $(find /usr/include/boost/); do echo "#include <"${i/"/usr/include/"/}">"; done > master_header.hpp
      

      现在您可以添加它并使用预编译的头文件(您可能需要通宵编译来制作 PCH)。您还应该将-Wl,-as-needed 传递给链接器以避免包含不需要的库。

      正如@sbi 所说,这至少是不可取的,但既然你问了......有时,找到“令人厌烦”的东西的最佳补救办法就是看看它可能会变得更糟!

      【讨论】:

      • 好吧,这里有一个+1 用于从技术上回答这个问题。不过,我比说“不可取”要严厉一些。
      • @sbi:如果没有别的,这将是使用可用工具的有用练习,并且可能使用 PCH... 当然你是对的,这不会成为一个现实的解决方案任何实际问题。
      • 我和 sbi 一起做这个。我没有尝试过,但我怀疑这可能会让一个成年人构建工作站在负载时像小狗一样尖叫,如果你甚至可以让它编译的话。
      • @Kerrek SB。我明白你的意思了。附带说明一下,如果我有一些手写的标题存储在我的 $PATH 中的文件夹foo 中,并且我想在其中包含所有标题怎么办?您建议的解决方案肯定会起作用,但只是为了好玩,是否有任何标准的 C / C++ 方法可以从源代码本身执行此操作?
      • @curiousexplorer:不,没有。
      猜你喜欢
      • 2012-01-04
      • 1970-01-01
      • 1970-01-01
      • 2015-05-08
      • 2015-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-21
      相关资源
      最近更新 更多