| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- target = uart
- lib_name = uart
- build_type ?= release
- build_type_dir ?= release
- example_dir ?= examples
- ifeq (${build_type}, release)
- build_type_dir := release
- DRFLAGS := -O3 -w
- else
- build_type_dir = debug
- DRFLAGS := -g3 -DDEBUG=1 -Wall -v
- endif
- build_dir = build/${build_type_dir}
- obj_dir := ${build_dir}/obj
- bin_dir := ${build_dir}/bin
- lib_dir := ${build_dir}/lib
- gcc_std := -std=gnu99
- g++_std := -std=c++11
- includes = src
- CFLAGS := -fPIC ${DRFLAGS} ${gcc_std} ${addprefix -I,${includes}}
- CXXFLAGS := -fPIC ${DRFLAGS} ${g++_std} ${addprefix -I,${includes}}
- ARFLAGS := rcsD
- LDFLAGS :=
- LDLIBS :=
- src_sources := $(shell find src -name '*.cpp' -or -name '*.c')
- example_sources := $(shell find examples -name '*.cpp' -or -name '*.c')
- sources := ${src_sources} ${example_sources}
- objects := $(sources:%=$(obj_dir)/%.o)
- static_lib = lib${lib_name}.a
- shared_lib = lib${lib_name}.so
- define collect_source_object
- $(patsubst ${example_dir}/%,${obj_dir}/${example_dir}/%.o, $(shell find ${example_dir} -name '*.cpp' -or -name '*.c' -or -name '*.s'))
- endef
- # 默认目标:构建最终的可执行文件
- all: ${lib_dir}/${static_lib} $(bin_dir)/$(target)
- # $(foreach m,${binary_name},$(eval ${bin_dir}/$m: $(call collect_source_object,$m)))
- ${bin_dir}/$(target): $(call collect_source_object, $(target))
- # 链接目标:将所有.o文件链接成可执行文件
- # $(bin_dir)/$(target): $(objects)
- # @mkdir -p $(dir $@)
- # ${CC} $^ -o $@
- $(bin_dir)/$(target):
- mkdir -p $(dir $@)
- ${CC} ${LDFLAGS} $^ ${LDLIBS} -o $@ -L./$(lib_dir) -l$(lib_name)
- # c source
- $(obj_dir)/%.c.o: %.c
- @mkdir -p $(dir $@)
- ${CC} ${CFLAGS} -c $< -o $@
- # c++ source
- $(obj_dir)/%.cpp.o: %.cpp
- @mkdir -p $(dir $@)
- ${CXX} ${CXXFLAGS} -c $< -o $@
- # static lib
- ${lib_dir}%.a: $(src_sources:%=$(obj_dir)/%.o)
- @mkdir -p $(dir $@)
- ${AR} ${ARFLAGS} $@ $^
- # shared lib
- $(lib_dir)/%.so: $(src_sources:%=$(obj_dir)/%.o)
- @mkdir -p $(dir $@)
- ${CC} -shared $^ ${LDFLAGS} ${LDLIBS} -o $@
-
- .PHONY: clean rebuild
- clean:
- rm -r build
- rebuild: clean all
|