C-MakeFile

本文详细介绍了CMake的使用,包括如何设置编译器、配置编译选项、处理依赖关系,以及创建可执行文件和数据文件的过程。通过示例展示了CMakeLists.txt文件的内容及其作用,包括宏替换、通配规则和目标构建等。
摘要由CSDN通过智能技术生成

原理:

1.b:E F

2.a:b c

生成 a:需要依赖于 b和c ,但是生成b需要依赖 E F 层层递归依赖到最后最基础的那个文件最终生成 a,生成时候执行gcc相关的指令(这部分做成通配规则)

文件内容:

#宏替换
CROSS_COMPILE=logic33-elf-
CC=$(CROSS_COMPILE)gcc
AS=$(CROSS_COMPILE)as
LD=$(CROSS_COMPILE)ld
SIZE=$(CROSS_COMPILE)size
OBJCOPY=$(CROSS_COMPILE)objcopy
OBJDUMP=$(CROSS_COMPILE)objdump
#GCC指令的配置参数
SIM=l33-sim

#RUN_CIRCLES=-c 10
#Gcc 配置参数
CFLAGS += -msoft-mul
LDFLAGS += -msoft-mul

LDFLAGS += -nostartfiles
LDSCRIPT = -T linker.ld
#宏 BUILD_DIR 替换build
BUILD_DIR=build/

# app
C_SRC += $(notdir ./main.c)
C_SRC += $(notdir ./uart.c)

CFLAGS += $(addprefix -I,$(INCDIR))
# C_SRC:%.c 的所有.c文件替换成 build/%.o
COBJS = $(C_SRC:%.c=$(BUILD_DIR)%.o)

# Assembly source file
ASM_SRC += crt0.S
#ASM_SRC += ttt.S
AOBJS = $(ASM_SRC:%.S=$(BUILD_DIR)%.o)

ifdef OPT
CFLAGS += -O$(OPT)
else
CFLAGS += -O2
endif
#输出a.bin 需要依赖rom.data 和ram.data
all: a.bin rom.data ram.data

a.out: $(AOBJS) $(COBJS)
    $(CC) $(LDFLAGS) -o a.out $^  -Wl,-Map=app.map $(LDSCRIPT)

a.bin: a.out
    $(OBJCOPY) -O binary $< $@

#通配规则

#%.data 输出依赖于%.bin 执行bin2V 指令
%.data: %.bin
    bin2v $< > $@
#rom.bin 输出依赖于a.out 执行objcopy指令生成 $< $@  '$<'(单个输入) '$@'(目标输出)
rom.bin: a.out
    $(OBJCOPY) -j.text -O binary $< $@
    #objcopy -j.text -O binary $< $@

ram.bin: a.out
    $(OBJCOPY) -j.data -O binary $< $@

size: a.out
    $(SIZE) $<

#通配规则

$(BUILD_DIR)%.o: %.c
    $(CC) -c $(CFLAGS) $< -o $@

$(BUILD_DIR)%.o: %.S
    #gcc -c -o %.o %.S   通过Gcc -c - o 将%.S文件 生成%.o文件
    $(CC) -c -o $@ $<
    
#通用的规则
%.s: %.c
    #gcc -xxx -xx  -S  %.c   输出:%.s
    $(CC) $(CFLAGS) -S $<

tags:
    ctags -R

sim: a.bin
    $(SIM) -bin a.bin -kbd-en $(RUN_CIRCLES)

simd: a.bin
    $(SIM) -bin a.bin -kbd-en -d $(RUN_CIRCLES)

dis: a.out
    $(OBJDUMP) -D a.out

clean:
    $(RM) -rf $(BUILD_DIR)*.o a.out *.map *.o tags *.bin dis.txt *.data *.mif dis.txt

.PHONY: all sim simd dis tags clean

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值