哪个编译器,编译这个文件?

时间:2013-03-14 19:07:30

标签: c gcc gnu gnu-make armcc

我正在使用gnu gcc和armcc来编译一些C文件。如何获取有关哪个编译器编译哪个文件的信息?

Ex:test.cpp由armcc或gnu gcc编译。

makefile非常复杂,我正在寻找一个命令,通过它我可以检查哪个编译器编译了哪个文件。

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

有时您可以使用十六进制编辑器查看文件,并判断编译器是否将其名称写入文件中。

答案 1 :(得分:2)

我不确定是否有更简单的方法,但您可以使用gcc(至少在我的平台上)将其嵌入到二进制文件中:

$ hexdump -C foo | grep -A2 GCC

00001030  00 00 00 00 00 00 00 00  47 43 43 3a 20 28 55 62  |........GCC: (Ub|
00001040  75 6e 74 75 2f 4c 69 6e  61 72 6f 20 34 2e 37 2e  |untu/Linaro 4.7.|
00001050  32 2d 32 32 75 62 75 6e  74 75 33 29 20 34 2e 37  |2-22ubuntu3) 4.7|

答案 2 :(得分:0)

某些编译器将编译器名称和版本嵌入到binrary中,但不是全部。我们还可以将任何我们想要的信息嵌入到二进制文件中。

gcc -DCOMPILER_DETAILS='"gcc 4.3.3"' temp.c

temp.c中,在任何地方使用宏COMPILER_DETAILS,就像在printf中使用它一样。这样这个字符串文字将嵌入生成的二进制文件中。不要将此字符串分配给未使用的变量,因为优化,编译器不会嵌入。