我有一个基于Visual C++的程序,它使用预编译头(stdafx.h)。现在,我们正在使用gcc 4.x将应用程序移植到Linux。
问题是如何在这两种环境中处理预编译头。我在谷歌上搜索过,但无法得出结论。
显然,我希望将stdafx.h留在Visual中,因为代码库非常大,预编译头会增加编译时间。
但问题是在Linux中应该做些什么。这就是我发现的:
stdafx.h。gcc比VC++更快地编译代码(或者只是我的Linux机器更强大. : ),所以我可能对这个选项很满意。stdafx.h看起来像(只为VS设置USE_PRECOMPILED_HEADER ):
如果USE_PRECOMPILED_HEADER ..。我的东西#endif/FI的编译/FI到的方法,在每个cpp文件中隐式地将包含stdafx.h。因此,在VS中,您的代码可以很容易地切换到无需预编译头的情况下进行编译,并且不需要更改任何代码。
我个人不喜欢依赖关系,而混乱的stdafx.h正在推动一个大的代码基础。因此,这个选项对我很有吸引力--在Linux上,您没有stdafx.h,同时仍然能够打开预编译的头文件,只有/FI才能打开VS。stdafx.h仅作为预编译头(模仿Visual )你的意见?是否有其他方法来处理这个问题?
发布于 2009-07-28 00:00:24
最好还是使用预编译头进行最快的编译。
您也可以在gcc中使用预编译的标题。看这里。
编译后的预编译头将作为.gch而不是.pch附加一个扩展。
因此,例如,如果您预编译stdafx.h,您将有一个预编译头,只要包含stdafx.h.gch,就会自动搜索它,称为stdafx.h。
示例:
stdafx.h:
#include <string>
#include <stdio.h>a.cpp:
#include "stdafx.h"
int main(int argc, char**argv)
{
std::string s = "Hi";
return 0;
}然后将其编译为:
> g++ -c stdafx.h -o stdafx.h.gch> g++ a.cpp> ./a.out
即使在步骤1之后删除stdafx.h,编译也会工作。
发布于 2009-07-28 00:00:51
上次我用备选方案3做同样的事情。我的项目很小,但效果很好。
发布于 2009-08-06 21:18:03
我要么选择选项4,要么选择2,我试验了不同版本的预编译头和Linux上的GCC (关于这个这里和这里的博客文章)。根据我的经验,VS比G++对包含路径的长度、包含路径中的目录数和包含文件的数量要敏感得多。当我测量构建时间时,正确排列预编译头将对VS下的编译时间产生巨大的影响,而G++则对此几乎不感兴趣。
实际上,基于以上所做的,上一次我在一个项目中所做的工作(这是控制编译时间所必需的)是预编译在Windows下相当于stdafx.h的内容,在Windows中它是有意义的,并且只是将它作为Linux下的常规文件使用。
https://stackoverflow.com/questions/1191248
复制相似问题