gpt4 book ai didi

c++ - 在跨平台代码中处理 stdafx.h

转载 作者:IT老高 更新时间:2023-10-28 13:58:59 26 4
gpt4 key购买 nike

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

问题是如何在两种环境中处理预编译的头文件。我用谷歌搜索但无法得出结论。

显然我想将 stdafx.h 留在 Visual Studio 中,因为代码库非常大,并且预编译的 header 会缩短编译时间。

但问题是在 Linux 中要做什么。这是我发现的:

  1. 保持 stdafx.h 不变。 gcc 编译代码的速度比 VC++ 快得多(或者它只是我的 Linux 机器更强大......:)),所以我可能对这个选项感到满意。
  2. 使用 here 的方法- 使 stdafx.h 看起来像(只为 VS 设置 USE_PRECOMPILED_HEADER):

    #ifdef USE_PRECOMPILED_HEADER
    ... my stuff
    #endif
  3. 使用 here 中的方法- 使用 /FI 编译 VC++ 以在每个 cpp 文件中隐式 包含 stdafx.h。因此,在 VS 中,您的代码可以轻松切换以在没有预编译头文件的情况下进行编译,并且无需更改任何代码。
    我个人不喜欢依赖和困惑 stdafx.h 正在插入一个大的代码库。因此,该选项对我很有吸引力 - 在 Linux 上,您没有 stdafx.h,但仍然只能通过 /FI 打开 VS 上的预编译头文件.

  4. 在 Linux 上编译 stdafx.h 仅作为预编译头文件(模仿 Visual Studio)

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

最佳答案

你最好还是使用预编译的头文件以获得最快的编译速度。

您也可以在 gcc 中使用预编译的头文件。 See here .

已编译的预编译 header 将附加一个扩展名,为 .gch 而不是 .pch

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

例子:

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,您的编译也将正常工作。

关于c++ - 在跨平台代码中处理 stdafx.h,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1191248/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com