Makefile 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. target = ringbuffer
  2. build_type ?= release
  3. build_type_dir ?= release
  4. build_dir = build/${build_type_dir}
  5. obj_dir := ${build_dir}/obj
  6. bin_dir := ${build_dir}/bin
  7. ifeq (${build_type}, release)
  8. build_type_dir := release
  9. DRFLAGS := -O3 -w
  10. else
  11. build_type_dir = debug
  12. DRFLAGS := -g3 -DDEBUG=1 -Wall -v
  13. endif
  14. gcc_std := -std=gnu99
  15. g++_std := -std=c++11
  16. includes = src
  17. CFLAGS := ${DRFLAGS} ${gcc_std} ${addprefix -I,${includes}}
  18. CXXFLAGS := ${DRFLAGS} ${g++_std} ${addprefix -I,${includes}}
  19. src_sources := $(shell find src -name '*.cpp' -or -name '*.c')
  20. example_sources := $(shell find examples -name '*.cpp' -or -name '*.c')
  21. sources := ${src_sources} ${example_sources}
  22. objects := $(sources:%=$(obj_dir)/%.o)
  23. # 默认目标:构建最终的可执行文件
  24. all: $(bin_dir)/$(target)
  25. # 链接目标:将所有.o文件链接成可执行文件
  26. $(bin_dir)/$(target): $(objects)
  27. @mkdir -p $(dir $@)
  28. ${CC} $^ -o $@
  29. # c source
  30. $(obj_dir)/%.c.o: %.c
  31. @mkdir -p $(dir $@)
  32. ${CC} ${CFLAGS} -c $< -o $@
  33. # c++ source
  34. $(obj_dir)/%.cpp.o: %.cpp
  35. mkdir -p $(dir $@)
  36. ${CXX} ${CXXFLAGS} -c $< -o $@
  37. .PHONY: clean
  38. clean:
  39. rm -r ${build_dir}