常见的变量赋值
obj= xxxxxx 将右值赋给 左值
obj+=xxxxxx 将右值 以追加的方式 给左值
obj:=xxxxxxxxx 右值 覆盖左值
obj?=xxxxxxxxx 如果左边的值没有赋值 将右值赋给左值
makefile文件编写
#-设置工程文件名,后续执行安装命令的时候用于指定安装文件夹名称-#
PROJECT ?= lvgl-sdl
#-指定编译时线程数量,shell nproc是一条shell指令,获取当前系统的CPU核数-#
MAKEFLAGS := -j $(shell nproc)
#-源文件扩展名-#
SRC_EXT := c cpp
#-目标文件扩展名-#
OBJ_EXT := o
#-将编译器设置成gcc-#
CC ?= gcc
#-源文件路径-#
SRC_DIR := ./
#-目标文件路径-#
WORKING_DIR := ./build
BUILD_DIR := $(WORKING_DIR)/obj
#-执行文件路径-#
BIN_DIR := $(WORKING_DIR)/bin
#-ui文件路径-#
UI_DIR := ui
#-O0表示将编译器的优化级别设置成0(即不进行优化),-g表示开启调试信息-#
CFLAGS := -O0 -g $(WARNINGS)
#- -D 表示定义一个宏-#
DEFINES := -D SIMULATOR=1 -D LV_BUILD_TEST=0
#- -I 表示添加的头文件的路径,-I需要紧跟着路径,不能有空格-#
INC := -I./ui/simulator/inc/ -I./ -I./lvgl/
#- 链接库-#
LDLIBS := -lSDL2 -lm
#- 生生成bin文件名-#
BIN := $(BIN_DIR)/demo
COMPILE = $(CC) $(CFLAGS) $(INC) $(DEFINES)
#-找到头文件,并不包含隐藏文件和隐藏目录-#
SRCS := $(shell find $(SRC_DIR) -type f -name '*.c' -o -name '*.cpp' -not -path '*/\.*')
#在BUILD_DIR文件夹中创建目标文件,目标文件名和SECS中的以SRC_EXT为后缀的文件名一样,但是后缀改成了OBI_EXT
OBJECTS := $(patsubst $(SRC_DIR)%,$(BUILD_DIR)/%,$(SRCS:.$(SRC_EXT)=.$(OBJ_EXT)))
all: default
#-@表示不在命令行中显示这条指令-#
#-`$(dir $@)`是一个Makefile内置的函数,用于获取目标文件的目录部分-#
#--c选项表示只编译不链接,-o选项指定输出文件名,"$@"表示输出文件名,"$<"表示第一个依赖文件(即源文件)-#
$(BUILD_DIR)/%.$(OBJ_EXT): $(SRC_DIR)/%.$(SRC_EXT)
@echo 'Building project file: $<'
@mkdir -p $(dir $@)
@$(COMPILE) -c -o "$@" "$<"
default: $(OBJECTS)
@mkdir -p $(BIN_DIR)
$(CC) -o $(BIN) $(OBJECTS) $(LDFLAGS) ${LDLIBS}
clean:
rm -rf $(WORKING_DIR)
install: ${BIN}
install -d ${DESTDIR}/usr/lib/${PROJECT}/bin
install $< ${DESTDIR}/usr/lib/${PROJECT}/bin/
参考: