我有一组使用gcc和make编译的C文件。构建过程正常。 我想知道我是否可以在编译期间获得一个包含所有源代码而没有任何预处理器宏的C文件。
答案 0 :(得分:2)
一个简单的方法是创建一个包含所有其他源文件的文件。
$cat *.c > metafile.c
这将构建这样一个文件,具体取决于你如何设置'pragma once'而ifndef这个文件可能无法单独编译。
另一方面,如果您想要在已展开和评估所有预处理器宏的文件中,那么答案是将以下内容添加到gcc:
-save-temps
然后文件.ii将包含展开和评估的宏
答案 1 :(得分:1)
如果您同时将所有文件包含在gcc编译器中,则可以使用
gcc -E main.c other.c another.c
这也包括stdlib函数可能使用-nostdinc
答案 2 :(得分:0)
你不能 - 通常你调用编译器只编译一个源文件,从而产生一个目标文件。稍后您在所有目标文件上调用链接器来创建可执行文件 - 它没有可用的原始C源代码。
但是,您可以创建一个单独的shell脚本,使用-E
选项调用gcc只是为了预处理源文件,然后使用cat
实用程序将所有源放在一个文件中
答案 3 :(得分:0)
您可以使用-save-temps
选项获取中间输出。但是,每个源文件将是一个输出文件。每个源文件都是单独编译的,代表了一个不能混淆的编译单元
您也可以使用-E
选项,但这只会运行预处理器而不是继续编译。