Макрос i386, предопределенный в make или gcc? - PullRequest
1 голос
/ 14 января 2012

Я пытался создать папку для каждой архитектуры, которую может поддерживать мой код. В этой папке находятся файлы, специфичные для платформы. Я включаю их следующим образом:

#define STR(x) #x
#define ASSTR(x) STR(x)

#include ASSTR(ARCHITECTURE/sizes.h)

Моя строка компиляции в make выглядит следующим образом:

gcc -o $@ -c $< -DARCHITECTURE=i386

Что работает, пока я не определю АРХИТЕКТУРУ как i386. Когда это происходит, он ищет файл 1 / sizes.h, поэтому я предполагаю, что он уже где-то определен.

1 Ответ

3 голосов
/ 14 января 2012

Мне кажется, что препроцессор C (cpp), который вызывается gcc, определяет i386 (для систем i386). Вы можете узнать, что он определяет так:

touch foo.h; cpp -dM foo.h; rm foo.h

Этот метод описывается справочной страницей cpp в -d с символом M (т. Е. -dM):

Вместо обычного вывода создайте список директив # define для всех макросов, определенных во время выполнения препроцессора, включая предопределенные макросы. Это дает вам возможность узнать, что предопределено в вашей версии препроцессора. Предполагая, что у вас нет файла foo.h, команда

    touch foo.h; cpp -dM foo.h

покажет все предопределенные макросы.

...