gcc auto dependency完整路径

时间:2015-06-18 18:58:13

标签: c++ gcc makefile g++

我有一个简单的项目 - 它有一个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:

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

1 个答案:

答案 0 :(得分:1)

问题在于-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

然后,无论""还是<>,我都会根据需要在bar.h中获得foo.d的完整路径。