我尝试过g++ -MM -MG -H -std=c++11 SomeSourceFile.cpp
。这里有两个输出,一个来自-MM -MG
,另一个来自-H
。
-MM -MG
:我得到了所有非系统(用户)包含,但是没有得到包含的层次结构。我只对直接包含感兴趣,但是此选项为我提供了所有包含。-H
:我获得include的层次结构信息,但仅获得编译器目录中的内容。我在输出中看不到非系统包含。是否有一种方法可以从源文件中获取直接的非系统包含项(即使它们尚不存在)?
答案 0 :(得分:0)
要帮助一些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