我正在使用gnu gcc和armcc来编译一些C文件。如何获取有关哪个编译器编译哪个文件的信息?
Ex:test.cpp由armcc或gnu gcc编译。
makefile非常复杂,我正在寻找一个命令,通过它我可以检查哪个编译器编译了哪个文件。
有什么想法吗?
答案 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
中使用它一样。这样这个字符串文字将嵌入生成的二进制文件中。不要将此字符串分配给未使用的变量,因为优化,编译器不会嵌入。