target = ringbuffer build_type ?= release build_type_dir ?= release build_dir = build/${build_type_dir} obj_dir := ${build_dir}/obj bin_dir := ${build_dir}/bin ifeq (${build_type}, release) build_type_dir := release DRFLAGS := -O3 -w else build_type_dir = debug DRFLAGS := -g3 -DDEBUG=1 -Wall -v endif gcc_std := -std=gnu99 g++_std := -std=c++11 includes = src CFLAGS := ${DRFLAGS} ${gcc_std} ${addprefix -I,${includes}} CXXFLAGS := ${DRFLAGS} ${g++_std} ${addprefix -I,${includes}} 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) # 默认目标:构建最终的可执行文件 all: $(bin_dir)/$(target) # 链接目标:将所有.o文件链接成可执行文件 $(bin_dir)/$(target): $(objects) @mkdir -p $(dir $@) ${CC} $^ -o $@ # 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 $@ .PHONY: clean clean: rm -r ${build_dir}