gpt4 book ai didi

c++ - GCC 预处理器一次输出和编译,v2

转载 作者:行者123 更新时间:2023-11-30 03:31:39 26 4
gpt4 key购买 nike

作为this question says , 我需要一个方法来做

gcc -E -c main.cc -o main.o

在我的编译器上,来自 QNX 但基于 gcc 4.4.2,使用 -save-temps 只给我汇编文件(没有预处理器文件)。

如果我在上面的命令中添加 -E,预处理器输出将保存到 main.o

我需要一种解决方案,它可以在一次调用 gcc 的情况下进行编译并输出预处理器,并具有上述约束。

最佳答案

On my compiler, from QNX but based on gcc 4.4.2, using -save-temps only gives me the assembly files (and no preprocessor files).

对于如此旧版本的 GCC 或任何 QNX 变体,我无法验证这一点。当然所有主流 GCC 版本至少与 4.7 一样尊重 ... -c -save-temps foo.c通过将预处理后的源代码保存在 foo.i 中并将程序集保存在 foo.s 中。

但如果您的 QNX GCC 4.4.2 出现这种情况,则有一个解决方法。

从您的评论看来,您反对调用编译两次是你不想浪费时间对源进行两次预处理。但是你可以调用编译器两次,一次做预处理,并再次进行编译,所以我认为这将是一个令人满意的解决方案。

您想要的命令行:

gcc -E -c main.cc -o main.o

显示提供给 C 编译器的 C++ 源文件。我认为这是一个失误。你所追求的结果的秘诀对称地不同C 和 C++。

对于 C 你想要:

gcc -E main.c > main.i && gcc -c -o main.o main.i

对于你想要的 C++:

g++ -E main.cc > main.ii && g++ -c -o main.o main.ii

这会将您要保存的预处理 C[C++] 输出写入main.i[.ii] 然后将预处理后的输出传递给编译器再次用于 C[C++] 编译。 gcc[g++] 识别文件扩展名 .i[.ii] 表示不应预处理的 C[C++] 源代码。参见 3.2 Options Controlling the Kind of Output ;因此它不会尝试再次预处理源。

此解决方案还具有不生成程序集文件的优点,即你不想要。

关于c++ - GCC 预处理器一次输出和编译,v2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44080082/

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