1.make简介:
https://blog.youkuaiyun.com/abc13526222160/article/details/94853883
make是一个命令工具,是一个解释makefile中指令的命令工具
2.Makefile中符号的含义:
https://blog.youkuaiyun.com/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.youkuaiyun.com/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.youkuaiyun.com/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)