我正在使用 gnu gcc 和 armcc 编译一些 C 文件。如何获取有关哪个编译器编译了哪个文件的信息?
例如:test.cpp 正在由 armcc 或 gnu gcc 编译。
makefile 非常复杂,我正在寻找一个命令,通过它我可以检查哪个编译器编译了哪个文件。
有任何想法吗?
有时您可以使用十六进制编辑器查看文件,并判断编译器是否将其名称写入文件。
我不确定是否有更简单的方法,但是您可以使用 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|
一些编译器将编译器名称和版本嵌入到二进制文件中,但不是全部。我们还可以将我们想要的任何信息嵌入到二进制文件中。
gcc -DCOMPILER_DETAILS='"gcc 4.3.3"' temp.c
在任何地方temp.c
使用宏COMPILER_DETAILS
,就像在printf
. 这样这个字符串文字就会被嵌入到生成的二进制文件中。不要将此字符串分配给未使用的变量,编译器不会因为优化而嵌入。