龙芯杯编译文件学习记录

/inst/make

  • 代码
srcs = $(wildcard *.S)
objs = $(patsubst %.S, %.o, $(srcs))

$(TOPDIR)/libinst.a: $(objs)
	$(CROSS_COMPILE)$(AR) -cr  $@ $?

clean:
	rm -f *.o *.a *.s

#print:
#	@echo $(srcs)
#	@echo $(objs)

-include $(TOPDIR)/rules.make
  • 解释
    这段代码看起来是一个Makefile,用于构建一个目标文件(libinst.a)以及清理和包含一些规则。让我为您逐行解释:
  1. srcs = $(wildcard *.S):这一行使用wildcard函数查找当前目录中所有以.S为扩展名的汇编语言源文件,并将它们的文件名列表存储在srcs变量中。

  2. objs = $(patsubst %.S, %.o, $(srcs)):这一行使用patsubst函数将srcs中的.S文件扩展名替换为.o,从而得到相应的目标文件列表,这些目标文件将在后续步骤中被构建。

  3. $(TOPDIR)/libinst.a: $(objs):这是一个规则,表示libinst.a是依赖于objs中列出的所有目标文件的。这意味着要构建libinst.a,必须首先构建所有列出的目标文件。

  4. $(CROSS_COMPILE)$(AR) -cr $@ $?:这是构建libinst.a的命令。它使用了Makefile中定义的变量CROSS_COMPILEAR,并将所有依赖项($?)打包成一个静态库文件libinst.a

  5. clean::这是一个伪目标(phony target),用于清理生成的文件。通过运行make clean命令,可以删除所有生成的.o.a.s文件。

  6. rm -f *.o *.a *.s:这是clean目标的命令,它会删除当前目录中的所有.o.a.s文件。

  7. -include $(TOPDIR)/rules.make:这行代码用于包含名为rules.make的外部Makefile规则文件。-include命令允许包含文件,如果文件不存在也不会报错。这通常用于将一些通用的规则包含到当前Makefile中。

总结一下,这个Makefile用于构建一个静态库文件libinst.a,该库文件的依赖项是通过将.S文件编译成.o文件来得到的。还包括了一个清理规则,用于删除生成的文件,并可以包含外部的规则文件rules.make

你可能感兴趣的:(学习)