如何避免重新编译头文件 我的单个C++文件包括来自各种库的许多头文件,例如MKL和模板库。由于包含许多include语句,每次编译这个文件都需要很长时间。我尝试在单个文件中分离include语句,从中生成一个对象文件,并在编译主文件时链接它,但编译器似乎无法识别头文件中定义的对象和函数的定义。 那么,如何节省这些头文件的编译时间呢?

如何避免重新编译头文件 我的单个C++文件包括来自各种库的许多头文件,例如MKL和模板库。由于包含许多include语句,每次编译这个文件都需要很长时间。我尝试在单个文件中分离include语句,从中生成一个对象文件,并在编译主文件时链接它,但编译器似乎无法识别头文件中定义的对象和函数的定义。 那么,如何节省这些头文件的编译时间呢?,c++,compilation,C++,Compilation,预编译头: 您正在做的事情听起来确实会从预编译头(pch)中受益匪浅。英特尔编译器确实支持pch,如下所示: 安装没有root权限的工具 您仍然可以使用ccache进行实验,看看这是否有助于您的情况——在不需要重新编译单元的情况下,它会产生巨大的差异,这种情况经常发生,令人惊讶。这样做的途径是在本地安装ccache。通常,这可以通过将源代码下载到具有写访问权限的目录(我在主目录中保留了一个安装文件夹)中,然后按照该项目的构建说明来完成。一旦构建了可执行文件,您就必须将可执行文件的路径添加到您的

预编译头:

您正在做的事情听起来确实会从预编译头(pch)中受益匪浅。英特尔编译器确实支持pch,如下所示:

安装没有root权限的工具

您仍然可以使用ccache进行实验,看看这是否有助于您的情况——在不需要重新编译单元的情况下,它会产生巨大的差异,这种情况经常发生,令人惊讶。这样做的途径是在本地安装ccache。通常,这可以通过将源代码下载到具有写访问权限的目录(我在主目录中保留了一个安装文件夹)中,然后按照该项目的构建说明来完成。一旦构建了可执行文件,您就必须将可执行文件的路径添加到您的路径中

export PATH=$PATH:the-path-to-your-compiled-executables.
在狂欢节上。此时,您的用户将可以使用ccache

这里有更好的解释:

CMAKE、科泰尔等

最后一点——我还没有阅读有关英特尔编译器pch支持的docu,但pch支持通常涉及一些手动代码操作,以指示编译器预编译哪个头,等等。我建议使用CMAKE管理您的构建,并使用cotire插件试验pch

虽然我从软件工程的角度对CMAKE感到不满,但它确实使管理您的构建,特别是尝试各种方法来加速构建变得容易得多。在试用过pch和ccache之后,你也可以试用忍者而不是make,看看这是否能让你有所进步


祝你好运。

预编译标题:

您正在做的事情听起来确实会从预编译头(pch)中受益匪浅。英特尔编译器确实支持pch,如下所示:

安装没有root权限的工具

您仍然可以使用ccache进行实验,看看这是否有助于您的情况——在不需要重新编译单元的情况下,它会产生巨大的差异,这种情况经常发生,令人惊讶。这样做的途径是在本地安装ccache。通常,这可以通过将源代码下载到具有写访问权限的目录(我在主目录中保留了一个安装文件夹)中,然后按照该项目的构建说明来完成。一旦构建了可执行文件,您就必须将可执行文件的路径添加到您的路径中

export PATH=$PATH:the-path-to-your-compiled-executables.
在狂欢节上。此时,您的用户将可以使用ccache

这里有更好的解释:

CMAKE、科泰尔等

最后一点——我还没有阅读有关英特尔编译器pch支持的docu,但pch支持通常涉及一些手动代码操作,以指示编译器预编译哪个头,等等。我建议使用CMAKE管理您的构建,并使用cotire插件试验pch

虽然我从软件工程的角度对CMAKE感到不满,但它确实使管理您的构建,特别是尝试各种方法来加速构建变得容易得多。在试用过pch和ccache之后,你也可以试用忍者而不是make,看看这是否能让你有所进步


祝您好运。

您使用哪种编译器/平台?如果您的编译器支持预编译头,使用此功能可以帮助您减少每次编译代码时重新编译头的需要。我在linux机器上使用“英特尔编译器”,它支持预编译吗?我也无法安装ccache实用程序,因为我没有root访问权限。是否每次都需要编译该文件?是否有一个相关头文件发生了更改?在我的店里,我们只在晚上用自动服务器重建。开发人员通常只编译已更改的文件或其依赖项之一已更改。@塔瑞克:安装
ccache
,不需要root访问权限;您可以编译它并将其配置为在您的“$HOME”中运行您使用哪种编译器/平台?如果您的编译器支持预编译头,则使用此功能可以帮助减少每次生成代码时重新编译头的需要。我在linux机上使用英特尔编译器,它支持预编译吗?我也无法安装ccache实用程序,因为我没有root访问权限。是否每次都需要编译该文件?是否有一个相关头文件发生了更改?在我的店里,我们只在晚上用自动服务器重建。开发人员通常只编译已更改的文件或其依赖项之一已更改。@塔瑞克:安装
ccache
,不需要root访问权限;您可以编译它并将其配置为在`$home中运行谢谢!预编译头(-pch选项)确实起到了作用。我安装了ccache,没有注意到它在有或没有pch的情况下在编译时间上有任何改进。谢谢!预编译头(-pch选项)确实起到了作用。我安装了ccache,没有注意到它在有或没有pch的情况下在编译时间上有任何改进。