2022-12-31 22:42:31 +08:00

111 lines
2.8 KiB
Makefile

# Specify the compiler name
CROSS_COMPILE ?=
# Name of the target
TARGET_NAME := demo
# Source File Directory
source_path := ./ ../../src
source_path += ./src
source_path += ./cmd
# Source Files
source_files :=
# Header file directory
include_path := ./include ../../include
# Exclude files that do not participate in compilation
exclude_files := ../../src/at_port.c
#Dependency library
LIB =
#MAKEFLAGS := -j $(shell nproc)
#
# 警告选项
#
WARNINGS := -Wall -Wextra -Werror\
-Wshadow -Wundef -Wmaybe-uninitialized \
-Wno-unused-function -Wno-error=strict-prototypes -Wpointer-arith -fno-strict-aliasing -Wno-error=cpp -Wuninitialized \
-Wno-missing-field-initializers -Wno-parentheses -Wno-format-nonliteral -Wno-cast-qual -Wunreachable-code -Wno-switch-default \
-Wreturn-type -Wmultichar -Wformat-security -Wno-ignored-qualifiers -Wno-error=pedantic -Wno-sign-compare -Wno-error=missing-prototypes -Wdouble-promotion -Wclobbered -Wdeprecated \
-Wempty-body -Wstack-usage=4096 -Wno-unused-parameter \
-Wtype-limits -Wsizeof-pointer-memaccess -Wpointer-arith -Wno-pointer-to-int-cast -Wno-pointer-sign
##############################################################################
# Compile options
#
CFLAGS := -O0 -g -fPIC -Wall $(WARNINGS)
CFLAGS += -std=gnu99
#############################################################################
# Linker options
#
# Link script
LDFLAGS = -Tlinker.lds -Wl,-Map=$(TARGET).map
#pthread
LDFLAGS += -pthread -lpthread
#############################################################################
AS = $(CROSS_COMPILE)as
LD = $(CROSS_COMPILE)ld
CC = $(CROSS_COMPILE)gcc
CPP = $(CC) -E
AR = $(CROSS_COMPILE)ar
NM = $(CROSS_COMPILE)nm
#Target directory
BIN_DIR := ./output/
OBJ_DIR := ./output/obj/
TARGET := $(BIN_DIR)$(TARGET_NAME)
TOPDIR := $(shell pwd)/
#Source file directory
SRC_DIRS := $(source_path)
#Search the list of source files
CSRCS := $(shell find $(SRC_DIRS) -maxdepth 1 -path '*.c')
CSRCS += $(source_files)
CSRCS := $(notdir $(CSRCS))
#排除文件列表
EXCLUDE_LIST := $(notdir $(exclude_files))
CSRCS := $(filter-out $(EXCLUDE_LIST), $(CSRCS))
#
# Target files(*.o)
#
OBJS := $(addprefix $(OBJ_DIR),$(CSRCS:.c=.o) )
CFLAGS += $(patsubst %,-I$(TOPDIR)%,$(subst ./, ,$(SRC_DIRS)))
CFLAGS += $(addprefix -I$(TOPDIR),$(include_path) )
#指定搜索目录
VPATH += $(addprefix :, $(SRC_DIRS))
all: default $(TARGET)
$(TARGET):$(OBJS)
@$(CC) $(LDFLAGS) -o $@ $^
@echo Creating $(notdir $(TARGET)) ...
$(OBJ_DIR)%.o: %.c
@echo 'Compiling ' $< ...
@$(CC) $(CFLAGS) -c -o $@ $<
.PHONY: all clean default
#创建输出目录
default:
@rm -rf $(TARGET)
@mkdir -p $(BIN_DIR)
@mkdir -p $(OBJ_DIR)
clean:
rm -rf $(TARGET).map
rm -rf $(TARGET)
@rm -rf $(OBJS)
@rm -rf tmp