makefile 使用

1.make简介: 
    https://blog.csdn.net/abc13526222160/article/details/94853883
make是一个命令工具,是一个解释makefile中指令的命令工具

2.Makefile中符号的含义:
https://blog.csdn.net/BobYuan888/article/details/88640923


3.报错: target pattern contains no ‘%‘
删除*.d 和*.o文件 ok
find -name '*.d' -type f -print -exec rm -rf {} \;
find -name '*.o' -type f -print -exec rm -rf {} \;

4.linux环境打包img用到exe程序
ubuntu安装:apt-get install  wine-development
sudo apt-get update

5.windows和虚拟机内linux无法共享文件,且vmware工具是灰色:
 https://blog.csdn.net/cph77777/article/details/79565695?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_default&utm_relevant_index=1
https://blog.csdn.net/cph77777/article/details/79565695?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_default&utm_relevant_index=1

6.编译helloworld:
编译了那些目录下的文件?
路径:at1k-sdk-v2
    ./device/at1k/src/
    ./device/core/
    ./rtos/portable/
    ./project/example/
    /middleware/newlib/
    ./middleware/log/
    ./middleware/util/
    不是所有源码的所有文件的都编译
    同个路径下有的文件编译有的文件不编译
    
怎么设置编译哪些文件?
    makefile的依赖关系:
    最顶层的依赖是?
            make -j 执行的是:all::   dir $(LINK_DEPS) $(OBJS) $(BIN) force #$(BIN_DUMP)
    代表什么含义?
        all:: 等价于all:
        find -name 和find -iname 搜索的结果一样
        
        
        AT1K_SDK_HOME_SH =at1k-sdk-v2
        BUILDSCRIPT_DIR = ./tools/mk
        LINKER_SCRIPT         =     $(AT1K_SDK_HOME_SH)/$(BUILDSCRIPT_DIR)/link.lds
        LINK_DEPS             +=     $(LINKER_SCRIPT)
        LINK_DEPS =  at1k-sdk-v2/./tools/mk/link.lds 
        
        //查找./device/所有.S文件
        DEVICE_DIR             =     ./device/
        BOOT_ASM_SRC        =     $(shell cd $(AT1K_SDK_HOME); find $(DEVICE_DIR) -iname "*.S" | sed -e 's/.\///1')
        
        //把./device/所有.S文件替换为 .O文件保存到 helloworld路径下相关文件夹
        BUILDTOPDIR            =    ./BUILD
        CHIP                 ?=    AT1K
        BUILDDIR               =     ./$(BUILDTOPDIR)/$(CHIP)/GCC_RISCV        
        BUILDDIR = ././BUILD/AT1K/GCC_RISCV
        BOOT_ASM_OBJ        =     $(patsubst %.S, $(BUILDDIR)/%.o, $(BOOT_ASM_SRC)) //单纯实现替换 

        
        //把./rtos/portable/所有.S文件替换为 .O文件保存到 helloworld路径下相关文件夹
        AT1K_SDK_HOME = at1k-sdk-v2
        PORT_DIR             =     ./rtos/portable
        RTOS_PORT_ASM_SRC    =     $(shell cd $(AT1K_SDK_HOME); find $(PORT_DIR) -iname "*.S" | sed -e 's/.\///1')
        RTOS_PORT_ASM_OBJ   =     $(patsubst %.S, $(BUILDDIR)/%.o, $(RTOS_PORT_ASM_SRC))
        
        ASM_OBJS            =     $(BOOT_ASM_OBJ) $(RTOS_PORT_ASM_OBJ) $(MID_ASM_OBJ)
        
        APP_OBJ                =     $(patsubst %.c, $(BUILDDIR)/%.o, $(APP_SRC))
        
        //APP_OBJ:把main.c 拷贝为main.o
        //$(APP_CC_OBJ) $(MID_OBJ)
        //RTOS_OBJ:list.c queue.c tasks.c timers.c event_groups.c stream_buffer.c
        RTOS_PORT_OBJ:port.c
        
        DRIVER_DIR             =     ./device/peripheral
        DRIVER_OBJ:./device/peripheral下所有.c文件
        DEVICE_OBJ:./device/at1k/下所有.c文件
        CC_SRC:
        
        C_OBJS              =     $(APP_OBJ) $(APP_CC_OBJ) $(MID_OBJ) $(RTOS_OBJ) $(RTOS_PORT_OBJ) $(DRIVER_OBJ) $(DEVICE_OBJ) $(CC_OBJ)
        OBJS = $(ASM_OBJS) $(C_OBJS)
        
        TARGET = helloworld
        BIN                 =     $(TARGET)
        $(BIN): $(OBJS) //目标依赖的点O文件不存在,会自动生成点o,文件 hello:main.o
            @$(CC) -MMD -MP -o $@ $(LDFLAGS) $(OBJS) $(EXTERNAL_OBJ) $(SYSLIBS) $(LIBS) $(LIBSFLAGS) $(STRIP)
            等价于
            LDFLAGS = T/at1k-sdk-v2/./tools/mk/link.lds -static -Wl,--gc-sections -Wl,--check-sections --stats -Wl,--print-memory-usage -Wl,-Map=all.map  -Wl,--noinhibit-exec -march=rv32imfcxpulpv2 -mabi=ilp32f 
            OBJS = 所有.o文件
            EXTERNAL_OBJ =空
            SYSLIBS = 空
            LIBS = -nostartfiles  -lm -lc -lgcc -nostdlib  -nodefaultlibs
            LIBSFLAGS = 空
            STRIP = 空
            riscv32-unknown-elf-gcc -MMD -MP -o helloworld -T/at1k-sdk-v2/./tools/mk/link.lds -static -Wl,--gc-sections -Wl,--check-sections --stats -Wl,--print-memory-usage -Wl,-Map=helloworld.map  -Wl,--noinhibit-exec -march=rv32imfcxpulpv2 -mabi=ilp32f  
            ././BUILD/AT1K/GCC_RISCV/device/core/src/entry.o  
            ././BUILD/AT1K/GCC_RISCV/device/core/src/start.o 
            ././BUILD/AT1K/GCC_RISCV/rtos/portable/portasm.o  
            ././BUILD/AT1K/GCC_RISCV/project/example/helloworld/main.o   
            ././BUILD/AT1K/GCC_RISCV/middleware/newlib/locks.o  
            ././BUILD/AT1K/GCC_RISCV/middleware/newlib/syscalls.o 
            ././BUILD/AT1K/GCC_RISCV/middleware/newlib/malloc.o 
            ././BUILD/AT1K/GCC_RISCV/middleware/newlib/reent_init.o 
            ././BUILD/AT1K/GCC_RISCV/middleware/log/log_noos.o 
            ...

            
            -nostartfiles  -lm -lc -lgcc -nostdlib  -nodefaultlibs          
                
        
        force: 
            @touch $(LINKER_TEMPLATE)
            
        all::   dir $(LINK_DEPS) $(OBJS) $(BIN) force #$(BIN_DUMP)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值