C++ 带参数的gcc“-S-保存临时文件”;将中间文件放在当前目录中

C++ 带参数的gcc“-S-保存临时文件”;将中间文件放在当前目录中,c++,c,gcc,compiler-construction,g++,C++,C,Gcc,Compiler Construction,G++,参数-S-save temps工作正常,只要我不在同名文件上使用它们 考虑以下情况:我有一个项目,其中有一个主目录和一个名为subDir的子目录,在这两个目录中都有名为file.c的文件。如果我现在调用gcc-S-save temps file.cpp subDir/file.c将只生成一个名为file.I的中间文件 这是预期的行为,正如gcc的man文件告诉我的,当使用-save temp时,中间文件将始终放置在当前路径中 我的问题是,我正在做我事先不知道的项目。很可能有人在他的makefil

参数
-S-save temps
工作正常,只要我不在同名文件上使用它们

考虑以下情况:我有一个项目,其中有一个主目录和一个名为
subDir
的子目录,在这两个目录中都有名为
file.c
的文件。如果我现在调用
gcc-S-save temps file.cpp subDir/file.c
将只生成一个名为
file.I
的中间文件

这是预期的行为,正如
gcc
的man文件告诉我的,当使用
-save temp
时,中间文件将始终放置在当前路径中

我的问题是,我正在做我事先不知道的项目。很可能有人在他的makefile中构建了上述示例。在这种情况下,我会被卡住,因为我需要两个中间文件

对我正在构建的系统说几句话(为了更好地理解):我的工具使用
make——只需打印
来收集调用,一个项目的make文件就会调用。我扫描这些编译器调用,并添加
-save temps
-S
选项。其目的是获取项目编译过程中使用的每个预处理文件


你有什么想法吗?即使上面提到的例子出现,我怎样才能得到每个预处理的文件?

不同目录下的file.cpp/file.c没有问题。GCC将根据文件的扩展名创建
*.ii
*.i


如果它们都有c | | cpp,您可以使用
-E
并只接收一个
*.i
,在这里您可以搜索pragma
#1”“
,并通过脚本提取它。

在gcc 4.5中,您可以在使用-o选项时使用“-save temps=obj”选项。这将中间文件保存在与输出文件相同的目录中,这有助于防止在使用不同源和输出目录的相同文件名时出现问题

gcc -save-temps=obj -c dir1/foo.c -o dir1/foo.o
gcc -save-temps=obj -c dir2/foo.c -o dir2/foo.o

中间文件将保存为
dir1/foo.*
dir2/foo.*

对不起,我的帖子中有一个输入错误。我的示例中的两个文件都有相同的扩展名。是的,我知道参数-E。但问题是,模式#1“”有多行。直到一分钟前,我还以为这是个问题。但我认为,使用这种模式的每一行要么只是声明一个路径,要么包含一个以.h结尾的头文件。所以应该可以解析这些东西。但是我还不确定,如果我能指望的话。非常感谢。在的帮助下,我应该能够解析使用
-E
获得的文件。