3

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

例如:test.cpp 正在由 armcc 或 gnu gcc 编译。

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

有任何想法吗?

4

3 回答 3

2

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

于 2013-03-14T19:15:14.517 回答
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|
于 2013-03-14T19:15:25.583 回答
0

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

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

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

于 2013-03-14T20:11:16.007 回答