我目前正在加速编译一个大型C ++项目(也有一些C代码)。最初我是
stddef.h
或vector
。但不适用于不应常用的stdio.h
或iostream
等内容。我认为系统标题会包含警戒,因此会被gcc的multiple include optimization覆盖。但是,似乎并非所有标题都遵循此准则。例如,stdlib.h
在开始时有#ifndef STDLIB_H
,stddef.h
遵循相同的模式。但是assert.h
没有标准的包含保护,cstddef
或cstdlib
也没有。
我一直在使用gcc中的-H
选项跟踪并随后分析此项目中的包含依赖项。我观察到的是,对于只有6个文件的小子项目,stdlib.h
和stddef.h
,它们遵循包含警戒模式,在输出中显示6次,而不是不会出现10或100次。我有点担心,由于其中一些文件可能位于远程网络驱动器上,因此编译速度可能较慢。
当我最初在项目中使用预编译的头文件时,只包含vector
等C ++头文件,以及某些内部库中的头文件时,我有点惊讶的是只能获得20%的性能提升。当我在Visual C ++中做类似的事情时,我看到了更大的增长。 (可能相关GCC build time doesn't benefit much from precompiled headers。)
我对gcc比较陌生,所以我可能错过了一些东西。我的问题是:
assert
添加到预编译的标头中,但我不想添加cstdlib
,例如。