gcc -E -dM дает мне определения препроцессора, но я хочу его скомпилировать - PullRequest
1 голос
/ 17 июня 2011

У меня большой исходный каталог со сложной структурой Makefile (много включений и т. Д.)

Я бы хотел, чтобы препроцессор определил, что gcc предоставит при запуске

gcc -E -dM. Тем не менее, я также хочу, чтобы источник был построен. И когда я проверяю журнал make / build, я хотел бы видеть все команды, которые были выполнены make, а также #defines из всех файлов в исходном коде, которые были переданы компилятору и / или переопределены.

Я не уверен, как это сделать.

Например,

Если бы был файл foo.c только с одной строкой

#define PI 3.14

Запуск gcc -E -dM foo.c распечатает все предварительные определения для stdout, а также определения внутри foo.c.

Но он не компилируется. Как объединить команды так, чтобы обе вещи происходили?

1 Ответ

3 голосов
/ 17 июня 2011

Вам нужно сделать это за два прохода, но вы, вероятно, можете настроить правило make-файла, например, для компиляции кода C:

%.o: %.c
    $(CC) $(CFLAGS) -dM -E $< > $<.dump  # dump all preprocessor symbols to .dump file
    $(CC) $(CFLAGS) -c $< -o $@          # compile to .o as normal

В качестве альтернативы, если вы хотите разделить сборку и предварительную обработку, вы можете использовать два правила, например,

%.o: %.c
    $(CC) $(CFLAGS) -c $< -o $@          # compile to .o as normal

%.dump: %.c
    $(CC) $(CFLAGS) -dM -E $< > $<.dump  # dump all preprocessor symbols to .dump file

Вам также потребуется поддельная цель, чтобы все файлы .c генерировали файлы .dump.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...