gcc参数之依赖生成

先列出以下几条命令:

1. gcc -M c.c :打印出依赖,预处理结束就停止编译。
2. gcc -M -MF c.d c.c:把依赖写入文件c.d,预处理结束就停止编译。
3. gcc -c -o c.o c.c -MD -MF c.d:编译c.c输出目标文件为c.o, 并把把依赖写入文件c.d。

4. gcc -c -o c.o  -Wp,-MD,c.d :与3等价。使用-Wp是仅传递参数给预处理阶段使用。

 

 

参数详解:

-M  不是输出预编译过程的结果,而是输出一个用于make的规则,该规则描述了这个源文件的依赖关系。预编译器输出的这个make规则包含名字与原文件相同的目标文件,冒号和所有include文件的名字。

-MM  与-M相似,只是不包含系统头文件

-MF file  将依赖关系写到文件file中

-MT target  重新定义目标对象名。默认的依赖目标名为% (编译生成的%.o)。

-MD/MMD  默认将生成的依赖文件写入%.d(编译生成的%.o)中。可以用-MF指定文件来覆盖。

 

示例makefile如下:

objs = a.o b.o c.o

dep_files := $(patsubst %,.%.d, $(objs))
dep_files := $(wildcard $(dep_files))

test: $(objs)
gcc -o test $^

ifneq ($(dep_files),)
include $(dep_files)
endif

%.o : %.c
gcc -c -o $@ $< -MD -MF .$@.d

clean:
rm *.o test

distclean:
rm $(dep_files)

.PHONY: clean

 

posted @ 2019-10-05 20:12  bluebluebluesky  阅读(908)  评论(0编辑  收藏  举报