| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- target = ringbuffer
- build_type ?= release
- build_type_dir ?= release
- 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 := ${DRFLAGS} ${gcc_std} ${addprefix -I,${includes}}
- CXXFLAGS := ${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${target}.a
- shared_lib = lib${target}.so
- # 默认目标:构建最终的可执行文件
- all: $(bin_dir)/$(target) ${lib_dir}/${static_lib} ${lib_dir}/${shared_lib}
- # 链接目标:将所有.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 $@
- # 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
|