这个文件正是因为Makefile中的-MMD这个参数导致生成的,而它的内容正是我们需要的目标文件依赖信息。 然后在Makefile中,include这个.d文件,从而让make知道:main.o 文件依赖于 main.c 和 hello.o 这 2 个文件。 这个时候,我们再来修改hello.h中的内容,例如:把NUM改成10,再次编译、执行: 代码语言:javascript 复制...
一、使用 GCC 产生依赖 基础规则生成:在 Makefile 中使用 gcc 的-M、-MM、-MD、-MMD等选项可以自动处理依赖问题。其中-M和-MM是生成依赖目标,区别在于-M生成的依赖列表中包括了系统头文件,而-MM只包括用户头文件。-MD、-MMD选项与-M、-MM类似,但它们会同时编译源文件并生成对象文件。 例如,以下规则可以生成...
OBJ_CMD 为多行变命令变量,作用是带颜色的输出当前编译百分比和编译的文件,编译命令则使用 makefile自动推导功能进行编译,@$(CXX) $(CXXFLAGS) $(INCLUDES) -MP -MMD -c $< -o $@ 的作用是生成源文件目标依赖关系,并为头文件生成伪目标。通过上面步骤即可完成一个自动化、通用 makefile 的编写。 以上内容...
$(OUT_DIR)/%.o:%.c (CC)(COMPILE_FLAGS) -MMD -MP -MF”(@:(@)” -c<−o“(addprefix−I,(INC_DIR)) $(OUT_DIR)/%.o:%.S (CC)(COMPILE_FLAGS) -MMD -MP -MF”(@:(@)” -c<−o“(addprefix−I,(INC_DIR)) .PHONY:all all:(OUTDIR)/(TARGET)(OUTDIR)/(TARGET).S19 ...
Makefile 只修改了.h头文件,编译为什么不起作用? 解决方案 添加了 -include *.d 指令; gcc 编译指令中,添加了 -MMD 参数; -include $(OBJ_FILES:%.o=%.d) %.o : %.c $(CC) $(CFLAGS) -c $< -o $@ M,-MM,-MMD,-MF,-MT区别 https://programmer.group/gcc-m-mm-mmd-mf-mt.html Ref...
这个文件正是因为Makefile中的-MMD这个参数导致生成的,而它的内容正是我们需要的目标文件依赖信息。 然后在Makefile中,include这个.d文件,从而让make知道:main.o 文件依赖于 main.c 和 hello.o 这 2 个文件。 这个时候,我们再来修改hello.h中的内容,例如:把NUM改成10,再次编译、执行: ...
其次在.c编译为.o文件时,增加了指令 -MMD -MP -MF,以及-MT。这些指令的作用都是生成.d的依赖文件,"(@:%.o=%.d)"是依赖文件的文件名,由于依赖文件和目标的.o文件是同名,只是后缀由.o变为.d,所以这边"(@:%.o=%.d)"的作用就是把目标.o文件的后缀改为.d,作为生成的依赖文件的文件名。
这里的CC是指arm-none-eabi-gcc,CFLAGS是指各类编译参数,例如-MMD -MP -Wno-missing-braces,$(@:%.o=%.lst)函数的作用是将$@目标符合%.o模型的值替换为%. lst,这里就将link_main.o替换link_main. lst,$<是指第一个依赖,$@是指目标,组合的命令后如下: ...
makefile 复制 LIBDIR = libSTATIC_LIB = $(LIBDIR)/libmodule.a$(STATIC_LIB): $(OBJS) ar rcs $@ $^app: $(STATIC_LIB) $(CC) $(CFLAGS) -o $@ main.o -L$(LIBDIR) -lmodule 三、依赖自动生成 makefile 复制 DEPDIR = .depsDEPFLAGS = -MT $@ -MMD -MP -MF $(DEPDIR)/$*...
gcc -M obj.c #获取目标obj.c的完整依赖关系gcc -MD obj.c #在-M的基础上,将输出导出到.d文件;gcc -MM obj.c #在-M的基础上,去除标准库的头文件;gcc -MMD obj.c #在-MM的基础上,将输出将导到.d文件:gcc -MM -MF "obj.d" obj.c #-MF可以指定输出文件,前面几个命令默认用obj.d文件; ...