gcc 自动依赖完整路径

gcc auto dependency full path

我有一个简单的项目 - 它有一个 foo.cxx 和一个 bar.h:

// bar.h
// nothing

// foo.cxx
#include "bar.h"
// nothing else

如果我将 bar.h 包含在 "" 中,则依赖文件包含所有内容及其完整路径:

$ g++ -std=c++11 -MP -MMD -MF /home/barry/sandbox/foo.d 
      -c /home/barry/sandbox/foo.cxx -o /home/barry/sandbox/foo.o

$ cat foo.d
/home/barry/sandbox/foo.o: /home/barry/sandbox/foo.cxx \
 /home/barry/sandbox/bar.h

/home/barry/sandbox/bar.h:

但是,如果我将它包含在 <> 中并添加 -I.,我只会得到 bar.h 本身:

$ g++ -std=c++11 -I. -MP -MMD -MF /home/barry/sandbox/foo.d 
      -c /home/barry/sandbox/foo.cxx -o /home/barry/sandbox/foo.o

$ cat foo.d
/home/barry/sandbox/foo.o: /home/barry/sandbox/foo.cxx bar.h

bar.h:

有没有办法获取 所有 个文件的完整路径?

问题出在 -I. 当 gcc 确定 <bar.h> 的包含时,它会发现它是 ./bar.h,因此它会打印在依赖文件中同理。

如果我也通过 -I 提供完整路径:

$ g++ -std=c++11 -I/home/barry/sandbox -MP -MMD 
      -MF /home/barry/sandbox/foo.d 
      -c /home/barry/sandbox/foo.cxx 
      -o /home/barry/sandbox/foo.o

然后不管""还是<>,我都根据需要在foo.d中得到了bar.h的完整路径。