我正在使用 gcc 来生成我的Makefile的依赖项。但它不使用相对路径。例如,
gcc -MM util/test.c ui/resource.c
产生
test.o: util/test.h
resource.o: ui/resource.h
虽然,为了让 make 找到依赖关系,它可以生成如下内容:
util/test.o: util/test.h
ui/resource.o: ui/resource.h
有没有办法让gcc表现得像第二个例子?
答案 0 :(得分:4)
来自man gcc
-MT 目标
更改依赖关系生成所发出的规则的目标。默认情况下,CPP获取主输入文件的名称,删除任何目录组件和任何文件后缀(如.c),并附加平台的常用对象后缀。结果是目标。-MT选项会将目标设置为您指定的字符串。如果需要多个目标,可以将它们指定为-MT的单个参数,或使用多个-MT选项。
例如,-MT'$(objpfx)foo.o'可能会给出
$(objpfx)foo.o:foo.c
-MQ 目标
与-MT相同,但它引用了Make特有的任何字符。 -MQ'$(objpfx)foo.o'给出$$(objpfx)foo.o:foo.c
自动引用默认目标,就好像它是使用-MQ一样。
所以,你可以使用例如
gcc -MM -MT util/test.o util/test.c
gcc -MM -MT ui/resource.o ui/resource.c
更新:
如果你想在一个文件中使用所有依赖项,有几种可能性。
您可以按顺序执行gcc -MM
并重定向输出
( gcc -MM -MT util/test.o util/test.c; gcc -MM -MT ui/resource.o ui/resource.c ) >file.deps
您可以使用sed或perl
对输出进行后处理gcc -MM util/test.c ui/resource.c | perl -p -e 's,^(.+?)\.o: (.+?)/\1\.c.*,$2/$&,;' >file.deps
您可以重定向第一个输出并将以下内容附加到某个文件
gcc -MM -MT util/test.o util/test.c >file.deps
gcc -MM -MT ui/resource.o ui/resource.c >>file.deps