GCC 预处理器一次输出和编译,v2
GCC preprocessor output and compilation in one pass, v2
作为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 是这种情况,则有一个解决方法。
从您的评论看来,您反对调用
编译两次是你不想浪费时间
对源进行两次预处理。但是你可以调用编译器两次,一次做预处理 only,
并再次进行编译仅,所以我认为这将是一个令人满意的解决方案。
您想要的命令行:
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;
所以它不会尝试再次预处理源。
这个解决方案还有一个优点就是不生成汇编文件,
你不要。
作为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 是这种情况,则有一个解决方法。
从您的评论看来,您反对调用 编译两次是你不想浪费时间 对源进行两次预处理。但是你可以调用编译器两次,一次做预处理 only, 并再次进行编译仅,所以我认为这将是一个令人满意的解决方案。
您想要的命令行:
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;
所以它不会尝试再次预处理源。
这个解决方案还有一个优点就是不生成汇编文件, 你不要。