从man gcc
-MT目标
改变相关性生成发出的规则的目标。默认情况下,CPP采用主输入文件的名称,删除任何目录组件和任何文件后缀(如.c),并附加平台的通常对象后缀。结果是目标。
-MT选项会将目标设置为您指定的字符串。如果您需要多个目标,则可以将它们指定为-MT的单个参数,或使用多个-MT选项。
例如,-MT '$(objpfx)foo.o的' 可能给
$(objpfx)foo.o的:foo.c的
-MQ目标
同-MT ,但它会引用任何特殊的字符。 -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
不好......这样我需要生成一个依赖文件fo r每个源文件。我想从我的所有来源生成一个单独的依赖文件... –
@AndréWagner请参阅最新的答案。 –