繁体   English   中英

Eclipse CDT - 预编译头

[英]Eclipse CDT - Precompiled Header

我正在寻找一种直接的方法来使用Eclipse / CDT为C ++项目使用预编译头。 从命令行运行时,这些东西确实有效,但我正在寻找一种将它集成到Eclipse中的简单方法。

有什么建议么 ?!

从我所看到的,目前Eclipse CDT不直接支持预编译头。 我的意思是,你不能设置如下选项:“对于这个标题,编译它”。 这同样适用于eclipse项目的外部库的头文件。

如您所知,您需要为标头编译设置相同的编译器标志,以便让编译器将其用于其他编译单元。 (至少在海湾合作委员会的情况下)。

那么,你有几个解决方案:

  • 您可以使用自定义脚本替换“属性 - > C / C ++构建 - >构建器设置 - >构建命令”中的默认构建命令,该脚本将修改eclipse生成的makefile,然后调用make。 这里提出一种红宝石溶液。 请注意,它不允许使用多个预编译头。
  • 您可以使用ccache而不是使用GCC。 它会检测何时再次进行相同的编译,因此它与使用预编译的头有点不同。

编辑:

要使ruby脚本正常工作,您需要在头文件所在的目录中至少有一个.cpp文件。 否则,您将在丢失的文件“subdir.mk”上收到错误消息。

另一种方法是创建一个源文件(例如pch.cpp),更改构建设置以创建预编译头。 它应该包含在构建中,以便创建预编译的头,然后排除以构建最终的可执行文件。 如果更改头文件,则需要暂时​​重新包含它。

该网站提供了更多详细信息,包括为每个构建配置创建不同预编译头的方法。

只是为了帮助那些可能偶然发现这个问题的人(因为我花了一些时间来搞清楚这一点)

首先要做的是使用pch.cpp和pch.h文件创建一个PCH文件夹(如果需要)。

pch.cpp :(这个文件是为了编译.gch)

#include "pch.h"

pch.h:

#include <iostream>
#include <string>
// more stuff that's not changing anytime soon...

第二件事是创建PCH构建配置。

从此版本中排除所有项目源文件。 (我们只需要编译pch.cpp)
选择文件/文件夹>右键单击>资源配置>从构建中排除> PCH

现在我们需要将其编译为.gch(预编译头)
pch.cpp>右键单击>属性> C / C ++生成>设置>工具设置
编译器>模式: ${COMMAND} ${FLAGS} ${INPUTS} (删除所有输出内容)
其他>标志: -c -x c++-header -o "../src/PCH/pch.h.gch"

现在,当您使用此配置构建时,它将生成pch.h所在的pch.h.gch。
(它也会在尝试创建exe时出现无意义的错误。只需忽略它)


回到正常的发布版本,排除pch.cpp,因为您不需要编译它。

现在是时候测试.gch正在使用.h

在pch.h的顶部放#error "not using precompiled header file"

只有在编译文件中首先包含标题时才使用.ghc。

“在特定编译中只能使用一个预编译头。”

您应该预编译最适合不同编译单元的不同标题选择


编译测试

没有预编译的头文件
took 34s.189ms output src=2,143,078 bytes exe=1,346,864 bytes

with -include ../src/PCH/pch.h(包含在每个编译单元中)(只有pch.h而不是.gch)
took 48s.364ms output src=2,159,431 bytes exe=1,355,298 bytes
(这就是为什么我们在需要的地方手动#include所以它仍然需要大约34秒来编译而没有.gch)

with -include ../src/PCH/pch.h和pch.h.gch(快速编译,但使用-include仍然效率低下)
took 22s.535ms output src=2,159,431 bytes exe=1,355,298 bytes

如果正确组织/使用pch(正确选择标题和文件以包含它们)(不在每个文件中使用)它应该比22s快得多。 (这个测试刚刚在一个没有用pch构建的项目上完成)


额外的加速,可以使编译时间增加三倍
项目>属性> C / C ++构建>行为>启用并行构建

考虑使用cmakecotire

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM