在文件中包含所有模板库

时间:2011-12-25 23:45:33

标签: c++ boost header

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

对于使用Boost库的某个功能,必须包含相应的header.e.g。对于boost::lexical_cast,我必须使用boost/lexical_cast.hpp。为我的项目使用的Boost / Thrust的每个新功能保留适当的标题是很累人的。

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

我在Ubuntu下使用GCC。

2 个答案:

答案 0 :(得分:6)

你不想那样。你想尽可能少地包括在内。编译时间在C ++中是非常糟糕的。开始将所有东西都包括在内,甚至会变得更糟。

我一直在一个项目中工作,那时在一个体面的单核CPU上进行编译需要50分钟,连接5-10分钟。如果你在基础深处做模板工作,这会给你带来很大的痛苦。

Boost带有一堆东西(比如MPL),它将编译器扩展到最大限度。在任何地方都包含这些东西是疯狂的(除了五个cpp文件类型的项目)。

答案 1 :(得分:2)

你可以简单地制作一个像母亲一样的头文件:

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

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

正如@sbi所说,这至少是不可取的,但是既然你问过......有时找到“无聊”的最好办法是看看它会有多糟糕!