Какой компилятор скомпилировал этот файл?

Я использую gnu gcc и armcc для компиляции нескольких C-файлов. Как я могу получить информацию о том, какой компилятор скомпилировал какой файл?

Пример: test.cpp компилируется armcc или gnu gcc.

Makefile очень сложен, и я ищу команду, с помощью которой я могу проверить, какой компилятор скомпилировал какой файл.

Есть идеи?

3 ответа

Решение

Иногда вы можете посмотреть на файл с помощью шестнадцатеричного редактора и сказать, записал ли компилятор свое имя в файл.

Я не уверен, что есть более простой способ, но вы можете найти его встроенным в двоичный файл с помощью 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, Так что этот строковый литерал будет встроен в сгенерированный двоичный файл. Не присваивайте эту строку неиспользуемой переменной, компилятор не будет встраиваться из-за оптимизации.

Другие вопросы по тегам