Учитывая исходный файл, есть ли способ попросить gcc вернуть список только непосредственно включенных заголовочных файлов? - PullRequest
0 голосов
/ 13 сентября 2018

Я пытался g++ -MM -MG -H -std=c++11 SomeSourceFile.cpp. Здесь есть два выхода: один от -MM -MG, а другой от -H.

  • -MM -MG: я получаю все несистемные (пользовательские) включения, но я не получаю иерархию включений. Меня интересуют только прямые включения, но эта опция дает мне все включения.
  • -H: Я получаю иерархическую информацию о включениях, но только те, которые находятся в каталоге компилятора. Я не вижу несистемных включений в выводе.

Есть ли способ получить прямые несистемные включения (даже если они еще не существуют) из исходного файла?

1 Ответ

0 голосов
/ 15 марта 2019

Какой Perl на помощь?

$ cat tmp.c
#include "a.h"
$ cat a.h
#include "b.h"
$ g++ tmp.c -E | perl -ne 'if (!defined $x) {
>   if (/^# 1 "([^"]+)" 1\b/) {
>      $x = $1;
>      print "$x\n";
>   }
> } else {
>   $x = undef if /^# 1 "$x" 2\b/;
> }'
a.h
...