我正在使用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 表现得像第二个例子?
-MT target
更改依赖生成发出的规则的目标。默认情况下,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