通过编译库加速编译
Speed up compilation by compiling library
我编写了一个程序,从 boost 库中导入并使用许多头文件。之后,编译时间从 1-2 秒变为 30 秒以上。由于我总是导入同一个库,所以我想知道是否有一种方法可以一次性编译它们以加快后续编译速度。
我对 shared/static 库非常不熟悉,找不到回答我问题的教程。
我不介意拥有更大的可执行文件,以防这是要付出的代价。
如果您在程序的一个 header 中包含 boost header,并且所有/许多程序的 .cpp 文件都包含 header,那么 boost headers 最终包含在所有 .cpp 文件中,并为每个文件编译一次。
为避免这种情况,您可以尝试在项目中的(一个)或几个 .cpp 文件中只包含 boost headers。
您也可以使用 PIMPL 习语,也称为 "compilation firewall"。这个想法是,你只在你的程序使用的 header 中公开一个接口,如果实现需要提升东西,那么它只会出现在 .cpp 文件中,这样你就不会在任何地方都包含提升。
请注意,header-only 库实际上与共享与静态无关。对于共享/静态库,您有 object 某种代码,这些代码是通过预先编译库获得的。使用 header-only 库,您导入的只是代码中的模板定义,您的编译器会使用它们。它在精神上更接近于静态而不是共享链接,但实际上也不是。
我编写了一个程序,从 boost 库中导入并使用许多头文件。之后,编译时间从 1-2 秒变为 30 秒以上。由于我总是导入同一个库,所以我想知道是否有一种方法可以一次性编译它们以加快后续编译速度。
我对 shared/static 库非常不熟悉,找不到回答我问题的教程。
我不介意拥有更大的可执行文件,以防这是要付出的代价。
如果您在程序的一个 header 中包含 boost header,并且所有/许多程序的 .cpp 文件都包含 header,那么 boost headers 最终包含在所有 .cpp 文件中,并为每个文件编译一次。
为避免这种情况,您可以尝试在项目中的(一个)或几个 .cpp 文件中只包含 boost headers。
您也可以使用 PIMPL 习语,也称为 "compilation firewall"。这个想法是,你只在你的程序使用的 header 中公开一个接口,如果实现需要提升东西,那么它只会出现在 .cpp 文件中,这样你就不会在任何地方都包含提升。
请注意,header-only 库实际上与共享与静态无关。对于共享/静态库,您有 object 某种代码,这些代码是通过预先编译库获得的。使用 header-only 库,您导入的只是代码中的模板定义,您的编译器会使用它们。它在精神上更接近于静态而不是共享链接,但实际上也不是。