我有一个基于 Visual Studio C++ 的程序,它使用预编译的头文件 ( stdafx.h
)。现在我们正在使用 gcc 4.x 将应用程序移植到 Linux。
问题是如何在两种环境中处理预编译的头文件。
我用谷歌搜索但无法得出结论。
显然,我想在 Visual Studio 中保留 stdafx.h
,因为代码库非常大,并且预编译的头文件加快了编译时间。
但问题是在 Linux 中该做什么。这是我发现的:
stdafx.h
不变。 gcc 编译代码比 VC++ 快得多(或者只是我的 Linux 机器更强大...... :)),所以我可能对这个选项感到满意。 stdafx.h
看起来像(仅针对 VS 设置 USE_PRECOMPILED_HEADER
):#ifdef USE_PRECOMPILED_HEADER
... my stuff
#endif
/FI
编译 VC++ 到 隐式包含每个文件 0x25181921 0x25181921 34102131313131313131313131313131313131313131313131313之间分别包含因此,在 VS 中,您的代码可以轻松切换为无需预编译头文件即可编译,并且无需更改任何代码。我个人不喜欢依赖关系,而困惑的
stdafx.h
正在插入一个大的代码库。因此,该选项对我很有吸引力 - 在 Linux 上,您没有 stdafx.h
,同时仍然只能通过 stdafx.h
打开 VS 上的预编译头文件。 /FI
仅作为预编译头文件(模仿 Visual Studio) 你的意见?是否有其他方法来处理这个问题?
最佳答案
您最好仍然使用预编译的头文件以获得最快的编译速度。
您也可以在 gcc 中使用预编译头文件。 See here。
编译后的预编译头将附加一个扩展名 .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;
}
然后编译为:
即使您在第 1 步之后删除 stdafx.h,您的编译也能正常工作。
关于c++ - 在跨平台代码中处理 stdafx.h,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1191248/