首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在跨平台代码中处理stdafx.h

在跨平台代码中处理stdafx.h
EN

Stack Overflow用户
提问于 2009-07-27 23:49:47
回答 10查看 37.5K关注 0票数 54

我有一个基于Visual C++的程序,它使用预编译头(stdafx.h)。现在,我们正在使用gcc 4.x将应用程序移植到Linux。

问题是如何在这两种环境中处理预编译头。我在谷歌上搜索过,但无法得出结论。

显然,我希望将stdafx.h留在Visual中,因为代码库非常大,预编译头会增加编译时间。

但问题是在Linux中应该做些什么。这就是我发现的:

  1. 保持原样的stdafx.h。gcc比VC++更快地编译代码(或者只是我的Linux机器更强大. : ),所以我可能对这个选项很满意。
  2. 使用这里的方法-使stdafx.h看起来像(只为VS设置USE_PRECOMPILED_HEADER ): 如果USE_PRECOMPILED_HEADER ..。我的东西#endif
  3. 使用从这里/FI的编译/FI的方法,在每个cpp文件中隐式地将包含stdafx.h。因此,在VS中,您的代码可以很容易地切换到无需预编译头的情况下进行编译,并且不需要更改任何代码。 我个人不喜欢依赖关系,而混乱的stdafx.h正在推动一个大的代码基础。因此,这个选项对我很有吸引力--在Linux上,您没有stdafx.h,同时仍然能够打开预编译的头文件,只有/FI才能打开VS。
  4. 在Linux上编译stdafx.h仅作为预编译头(模仿Visual )

你的意见?是否有其他方法来处理这个问题?

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2009-07-28 00:00:24

最好还是使用预编译头进行最快的编译。

您也可以在gcc中使用预编译的标题。看这里

编译后的预编译头将作为.gch而不是.pch附加一个扩展。

因此,例如,如果您预编译stdafx.h,您将有一个预编译头,只要包含stdafx.h.gch,就会自动搜索它,称为stdafx.h

示例:

stdafx.h:

代码语言:javascript
复制
#include <string>
#include <stdio.h>

a.cpp:

代码语言:javascript
复制
#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,编译也会工作。

票数 48
EN

Stack Overflow用户

发布于 2009-07-28 00:00:51

上次我用备选方案3做同样的事情。我的项目很小,但效果很好。

票数 3
EN

Stack Overflow用户

发布于 2009-08-06 21:18:03

我要么选择选项4,要么选择2,我试验了不同版本的预编译头和Linux上的GCC (关于这个这里这里的博客文章)。根据我的经验,VS比G++对包含路径的长度、包含路径中的目录数和包含文件的数量要敏感得多。当我测量构建时间时,正确排列预编译头将对VS下的编译时间产生巨大的影响,而G++则对此几乎不感兴趣。

实际上,基于以上所做的,上一次我在一个项目中所做的工作(这是控制编译时间所必需的)是预编译在Windows下相当于stdafx.h的内容,在Windows中它是有意义的,并且只是将它作为Linux下的常规文件使用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1191248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档