使用默认链接文件生成可执行文件:
cc = gcc prom = hello DIR= ($shell pwd) inc_dir = $(DIR)/inc src_dir = $(DIR)/src obj = $(pathsubst $(src_dir)/%.c, $(src_dir)/%.o, $(wildcard $(src_dir)/%.c) ) $(prom): $(obj) $(cc) -o $(prom) $(obj) %.o: %.c $(deps) $(cc) -I$(inc_dir) -c $< -o $@ .PHONY : clean clean: rm -rf $(obj) $(prom)
$(cc) -o $(prom) $(obj) 执行的是链接操作,虽然是用 gcc,但是实际还是用 ld
指定链接文件生成可执行文件:
prom = hello DIR= ($shell pwd) inc_dir = $(DIR)/inc src_dir = $(DIR)/src obj = $(pathsubst $(src_dir)/%.c, $(src_dir)/%.o, $(wildcard $(src_dir)/%.c) ) output = $(DIR)/out LINK_DIR = $(DIR)/toolchain/bin/arm-none-eabi- LINK_LD = $(LINK_DIR)/ld LINK_OBJCOPY = $(LINK_DIR)/objcopy LINK_LDFILE = $(DIR)/link.ld cc = $(LINK_DIR)/gcc all: clean $(output) $(obj_dir) $(prom) $(output): mkdir $@ $(obj_dir): mkdir $@ $(prom): $(obj) $(LINK_LD) -T$(LINK_LDFILE ) $(obj) -o hello.elf $(LINK_OBJCOPY) -O binary -S hello.elf hello.bin $(obj_dir)/%.o: $(src_dir)/%.c $(cc) -I$(inc_dir) -c $< -o $@ .PHONY : clean clean: rm -rf $(obj) rm -rf %(output)/*