Advertisement
adfasdfadsfasdf

make

Mar 21st, 2023 (edited)
245
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Make 1.06 KB | None | 0 0
  1. # compiler
  2. CC := g++
  3. # linker flags
  4. LDFLAGS := -flto
  5. # source files
  6. SRC_DIR := src
  7. SRCS := $(wildcard $(SRC_DIR)/**/*.cpp) $(wildcard $(SRC_DIR)/*.cpp) main.cpp
  8. # compiler flags
  9. CFLAGS := -std=c++17 -Wall -Wextra -pedantic -O3 -I$(SRC_DIR)
  10. # object files
  11. OBJ_DIR := obj/**/
  12. OBJS := $(patsubst $(SRC_DIR)/%.cpp,$(OBJ_DIR)/%.o,$(SRCS))
  13. # executable
  14. EXEC := my_program
  15.  
  16. # test files
  17. TEST_DIR := tests
  18. TEST_SRCS := $(wildcard $(TEST_DIR)/**/*.cpp) $(wildcard $(TEST_DIR)/*.cpp)
  19. TEST_OBJS := $(patsubst $(TEST_DIR)/%.cpp,$(OBJ_DIR)/%.o,$(TEST_SRCS))
  20. TEST_EXEC := test
  21.  
  22. # build rules
  23. $(EXEC): $(OBJS)
  24.     $(CC) $(LDFLAGS) $^ -o $@
  25.  
  26. $(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp | $(OBJ_DIR)
  27.     $(CC) $(CFLAGS) -c $< -o $@
  28.  
  29. $(TEST_EXEC): $(OBJS) $(TEST_OBJS)
  30.     $(CC) $(LDFLAGS) $^ -o $@
  31.  
  32. $(OBJ_DIR)/%.o: $(TEST_DIR)/%.cpp | $(OBJ_DIR)
  33.     $(CC) $(CFLAGS) -c $< -o $@
  34.  
  35. $(OBJ_DIR):
  36.     mkdir -p $(OBJ_DIR)
  37.  
  38. .PHONY: all
  39. all:
  40.     echo $(SRCS)
  41.     $(EXEC) $(TEST_EXEC)
  42.  
  43. .PHONY: tests
  44. tests: $(TEST_EXEC)
  45.     ./$(TEST_EXEC)
  46.  
  47. .PHONY: clean
  48. clean:
  49.     rm -rf $(OBJ_DIR) $(EXEC) $(TEST_EXEC)
  50.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement