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
获得的文件。