GCC 自动依赖完整路径

gcc auto dependency full path

本文关键字:路径 依赖 GCC      更新时间:2023-10-16

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

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

如果我在 "" s 中包含 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:

但是,如果我将其包含在 <> s 中并添加 -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的完整路径。