CLEAN_OBJS_OTHER += $(TARGET).elf $(TARGET).map $(TARGET).bin $(TARGET).dump $(TARGET).dasm \ $(TARGET).srec $(TARGET).hex $(TARGET).verilog openocd.log $(ALL_DEPS) $(ALL_GCNOS)
时间: 2023-12-19 20:06:18 浏览: 67
这也是一个Makefile文件中的语句,将一系列文件名添加到CLEAN_OBJS_OTHER变量中,这些文件名包括编译生成的文件(.elf, .map, .bin, .dump, .dasm, .srec, .hex, .verilog),以及一些其他文件(openocd.log, 所有的依赖文件ALL_DEPS, 所有的gcno文件ALL_GCNOS)。这样做的目的是为了在运行清理操作时,将这些文件一并删除,保持目录的整洁和清晰。
相关问题
include ../Makefile.param SMP_SRCS += $(wildcard $(PWD)/*.c) SMP_INC := -I$(PWD)/ TARGET := sample_ax TARGET_PATH := $(PWD) # target source OBJS := $(SMP_SRCS:%.c=%.o) CFLAGS += $(COMM_INC) .PHONY : clean all all: $(TARGET) %.o: %.c @$(CC) $(CFLAGS) -c $^ -o $@ $(TARGET):$(COMM_OBJ) $(OBJS) @$(CC) $(CFLAGS) -lpthread -lm -o $(TARGET_PATH)/$@ $^ -Wl,--start-group $(SENSOR_LIBS) $(MI_LIBS) -Wl,--end-group clean: @rm -f $(TARGET_PATH)/$(TARGET) @rm -f $(OBJS) @rm -f $(COMM_OBJ)
这是一个简单的Makefile文件,用于编译一个名为sample_ax的目标文件。该目标文件依赖于一些源文件(以.c为后缀),其中$(SMP_SRCS)是通配符函数$(wildcard $(PWD)/*.c)的结果。$(OBJS)是将源文件转换为目标文件的规则。
在编译过程中,使用了一些变量和选项。$(CFLAGS)是编译选项,$(COMM_INC)是包含的头文件路径。-lpthread和-lm用于链接线程库和数学库。
在生成目标文件之前,需要先生成$(COMM_OBJ)(该变量未在代码中定义),并将其与$(OBJS)一起链接成最终的目标文件$(TARGET)。
clean目标用于清理生成的目标文件和中间文件。
请注意,这只是Makefile文件的一部分,可能还需要其他文件和选项才能成功编译。
帮我讲解一下下面这些代码 CROSS_COMPILE ?= arm-linux-gnueabihf- TARGET ?= ledc CC := $(CROSS_COMPILE)gcc LD := $(CROSS_COMPILE)ld OBJCOPY := $(CROSS_COMPILE)objcopy OBJDUMP := $(CROSS_COMPILE)objdump INCDIRS := imx6u \ bsp/clk \ bsp/led \ bsp/delay SRCDIRS := project \ bsp/clk \ bsp/led \ bsp/delay INCLUDE := $(patsubst %, -I %, $(INCDIRS)) SFILES := $(foreach dir, $(SRCDIRS), $(wildcard $(dir)/*.S)) CFILES := $(foreach dir, $(SRCDIRS), $(wildcard $(dir)/*.c)) SFILENDIR := $(notdir $(SFILES)) CFILENDIR := $(notdir $(CFILES)) SOBJS := $(patsubst %, obj/%, $(SFILENDIR:.S=.o)) COBJS := $(patsubst %, obj/%, $(CFILENDIR:.c=.o)) OBJS := $(SOBJS) $(COBJS) VPATH := $(SRCDIRS) .PHONY: clean $(TARGET).bin : $(OBJS) $(LD) -Timx6u.lds -o $(TARGET).elf $^ $(OBJCOPY) -O binary -S $(TARGET).elf $@ $(OBJDUMP) -D -m arm $(TARGET).elf > $(TARGET).dis $(SOBJS) : obj/%.o : %.S $(CC) -Wall -nostdlib -c -O2 $(INCLUDE) -o $@ $< $(COBJS) : obj/%.o : %.c $(CC) -Wall -nostdlib -c -O2 $(INCLUDE) -o $@ $< clean: rm -rf $(TARGET).elf $(TARGET).dis $(TARGET).bin $(COBJS) $(SOBJS)
这段代码是一个Makefile文件,用于编译 ARM 架构的嵌入式系统程序。以下是代码中各个变量和规则的解释:
- CROSS_COMPILE:交叉编译工具链的前缀。
- TARGET:目标文件名。
- CC:编译器命令。
- LD:链接器命令。
- OBJCOPY:目标文件格式转换命令。
- OBJDUMP:反汇编命令。
- INCDIRS:头文件目录列表。
- SRCDIRS:源文件目录列表。
- INCLUDE:包含头文件的编译选项。
- SFILES:汇编文件列表。
- CFILES:C语言文件列表。
- SFILENDIR:汇编文件列表中不包含路径的文件名。
- CFILENDIR:C语言文件列表中不包含路径的文件名。
- SOBJS:编译后的汇编文件对象文件列表。
- COBJS:编译后的C语言文件对象文件列表。
- OBJS:所有对象文件列表。
- VPATH:源文件搜索路径。
Makefile中的规则:
- $(TARGET).bin:目标文件规则,依赖于所有的对象文件。
- $(LD):链接器命令,链接所有的对象文件生成ELF文件。
- $(OBJCOPY):目标文件格式转换命令,将ELF文件转换成二进制文件。
- $(OBJDUMP):反汇编命令,生成反汇编代码。
- $(SOBJS):汇编文件对象文件规则,依赖于汇编文件,使用$(CC)编译器进行编译。
- $(COBJS):C语言文件对象文件规则,依赖于C语言文件,使用$(CC)编译器进行编译。
- clean:清除目标文件、对象文件和反汇编文件。
阅读全文