我正在寻找一种直接使用Eclipse / CDT为C ++项目使用预编译头的方法。这些东西在从命令行运行时确实有效,但我正在寻找一种简单的方法将它集成到Eclipse中。
有什么建议吗?!
答案 0 :(得分:1)
从我所看到的,目前Eclipse CDT不直接支持预编译头文件。我的意思是,你不能设置如下选项:“对于这个标题,编译它”。这同样适用于eclipse项目的外部库的头文件。
如您所知,您需要为标头编译设置相同的编译器标志,以便让编译器将其用于其他编译单元。 (至少在海湾合作委员会的情况下)。
所以,你有几个解决方案:
编辑:
要使ruby脚本正常工作,您需要在头文件所在的目录中至少有一个.cpp文件。否则,您将在丢失的文件“subdir.mk”上收到错误。
答案 1 :(得分:1)
另一种方法是创建一个源文件(例如pch.cpp),更改构建设置以创建预编译头。它应该包含在构建中,以便创建预编译的头,然后排除以构建最终的可执行文件。如果更改了头文件,则需要暂时重新包含它。
This website提供了更多详细信息,包括为每个构建配置创建不同预编译头的方法。
答案 2 :(得分:1)
只是帮助那些可能会偶然发现的人(因为我花了一些时间弄清楚这个问题)
要做的第一件事是创建一个带有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 ++ Build>设置>工具设置
编译器>模式:${COMMAND} ${FLAGS} ${INPUTS}
(删除所有输出内容)
其他>标志:-c -x c++-header -o "../src/PCH/pch.h.gch"
现在,使用此配置进行构建时,它将生成pch.h所在的pch.h.gch。
(尝试创建exe时也会产生无意义的错误。请忽略该错误)
回到正常的Release版本,排除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
-include ../ src / PCH / pch.h(包含在每个编译单元中)(仅pch.h而不是.gch)
took 48s.364ms output src=2,159,431 bytes exe=1,355,298 bytes
(这就是为什么我们在需要的地方手动#include,因此在没有.gch的情况下仍需要大约34秒的时间进行编译)
使用-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 ++构建>行为>启用并行构建
答案 3 :(得分:0)