$(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
-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
-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