Advertisement
gluk47

generic makefile

Feb 3rd, 2023 (edited)
2,123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Make 1.67 KB | None | 0 0
  1. all: tidy run  # что запускать при вызове `make` без параметров
  2.  
  3. CXX_FLAGS = -Wall -Wextra -std=c++20
  4. BUILD = clang++ -o $@ $< $(CXX_FLAGS)
  5. DEBUG_MODE = -fno-omit-frame-pointer -g
  6.  
  7. TASK_CPP = $(filter-out main.cpp, $(wildcard *.cpp))
  8.  
  9. test: $(TASK_CPP) main.cpp
  10.     clang++ -o $@ $^ -fsanitize=address $(DEBUG_MODE) $(CXX_FLAGS)
  11.  
  12. # Запускается каждый раз, потому что такого выходного файла не создаётся
  13. # $(basename $<) — это $(basename multiplication.cpp) — это multiplication
  14. tidy: $(TASK_CPP)
  15.     cd ../../build && ../run_linter.sh $(basename $<)
  16.  
  17. run: test
  18.     ./test
  19.  
  20. #  $@: цель сборки
  21. #  $<: первая зависимость сборки
  22. #  $^: все зависимости сборки
  23.  
  24. # -fsanitize=... — диагностика
  25. # -Osize -O0 -O1 -O2 -O3 — уровень оптимизации
  26. # -fno-omit-frame-pointer — сохранять указатели на функции для диагностики
  27. # -g — отладочная информация
  28.  
  29. code.i: code.cpp
  30.     clang++ -E $< > $@
  31.  
  32. o0: code.cpp
  33.     $(BUILD) -O0
  34.  
  35. o1: code.cpp
  36.     $(BUILD) -O1
  37.  
  38. o2: code.cpp
  39.     $(BUILD) -O2
  40.  
  41. o3: code.cpp
  42.     $(BUILD) -O3
  43.  
  44. asan: code.cpp Makefile
  45.     $(BUILD) $(DEBUG_MODE) -fsanitize=address
  46.  
  47. msan: code.cpp
  48.     $(BUILD) $(DEBUG_MODE) -fsanitize=memory -fsanitize-memory-param-retval
  49.  
  50. ubsan: code.cpp
  51.     $(BUILD) $(DEBUG_MODE) -fsanitize=undefined
  52.  
  53. lsan: code.cpp
  54.     $(BUILD) $(DEBUG_MODE) -fsanitize=leak
  55.  
  56. # make aaa выполнит этот сценарий, если есть файл aaa.cpp
  57. %: %.cpp
  58.     $(BUILD) $(DEBUG_MODE) -fsanitize=address
  59.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement