代码之家  ›  专栏  ›  技术社区  ›  Learning is a mess

通过编译库加快编译速度

  •  0
  • Learning is a mess  · 技术社区  · 10 年前

    我编写了一个程序,导入并使用boost库中的许多标头。之后,编译时间从1-2秒变为30s以上。由于我总是导入同一个库,我想知道是否有一种方法可以一次性编译它们,以加快后续编译。

    我对共享/静态库非常陌生,找不到解答我问题的教程。

    我不介意有一个更大的可执行文件,以防这是要付出的代价。

    1 回复  |  直到 10 年前
        1
  •  1
  •   Chris Beck    10 年前

    如果在程序的一个头中包含boost头,并且程序的所有/许多.cpp文件都包含该头,那么boost头最终会包含在所有.cpp中,并为每个文件编译一次。

    为了避免这种情况,您可以尝试在项目中的(一个)或几个.cpp文件中只包含boost头。

    您还可以使用PIMPL习语,也称为“编译防火墙”。这个想法是,您只在程序使用的头中公开一个接口,如果实现需要boost,那么它只会出现在.cpp文件中,这样您就不会在任何地方都包含boost。


    请注意,只有头的库实际上与共享库和静态库无关。对于共享/静态库,您可以通过预先编译库获得某种类型的目标代码。对于只有头的库,您要导入的只是代码中的模板定义,编译器会使用它们。它在精神上更接近静态,而不是共享链接,但实际上也不是。