GCC 编译选项 MF 和 MT

时间:2021-11-11 19:06:38
%.d : %.c
        $(CC) $(CCFLAGS) -MF"$@" -MG -MM -MP -MT"$@" -MT"$(<:.c=.o)" "$<"

查资料说:
  关于-MF和-MT,这些选项是用来生成依赖文件列表的,而这个列表又能以-include <dlist>或者include <dlist>的形式添加到Makefile中。其中MF指定文件名,MT指定依赖目标名。
  不明白的地方:
    1 MT  MF 在上述的编译语句中其什么作用?
    2 上面说的“MF指定文件名,MT指定依赖目标名”含义是什么?

1 个解决方案

#1


-MF很好理解,就是输出依赖文件名
-MT就是说在输出的依赖文件中的目标, 楼主的例子里为-MT"$@" -MT"$(<:.c=.o)"
就是说在输出的依赖文件中目标是 "$@" 和 "$(<:.c=.o)"

看个例子就明白了, 注意红色和蓝色的部分,分别对应两个MT的"目标"
$ cat Makefile
%.d : %.c
        $(CC) $(CCFLAGS) -MF"$@" -MG -MM -MP -MT" $@" -MT" $(<:.c=.o)" "$<"

$ make demo.d
gcc  -MF"demo.d" -MG -MM -MP -MT" demo.d" -MT" demo.o" "demo.c"
$ cat demo.d
demo.d  demo.o: demo.c

#1


-MF很好理解,就是输出依赖文件名
-MT就是说在输出的依赖文件中的目标, 楼主的例子里为-MT"$@" -MT"$(<:.c=.o)"
就是说在输出的依赖文件中目标是 "$@" 和 "$(<:.c=.o)"

看个例子就明白了, 注意红色和蓝色的部分,分别对应两个MT的"目标"
$ cat Makefile
%.d : %.c
        $(CC) $(CCFLAGS) -MF"$@" -MG -MM -MP -MT" $@" -MT" $(<:.c=.o)" "$<"

$ make demo.d
gcc  -MF"demo.d" -MG -MM -MP -MT" demo.d" -MT" demo.o" "demo.c"
$ cat demo.d
demo.d  demo.o: demo.c