Last active
March 16, 2019 08:06
-
-
Save Niakr1s/097db80004b6a2efc3afb70372ed41f3 to your computer and use it in GitHub Desktop.
simple makefile
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| CC = g++ | |
| CFLAGS = -Wall | |
| LDFLAGS = | |
| SRC_PATH = src/ | |
| MAIN_OBJ = main.o # to filter out it from test objs | |
| SRCS = $(wildcard $(SRC_PATH)*.cpp) # get all .cpp in src dir | |
| # for tests | |
| TEST_CFLAGS = $(CFLAGS) -Id:/libs/boost_1_69_0/stage/include/boost-1_69 | |
| TEST_LDFLAGS = $(LDFLAGS) -Ld:/libs/boost_1_69_0/stage/lib -lboost_unit_test_framework-mgw82-mt-s-x32-1_69 | |
| TEST_PATH = tests/ | |
| # making PREFIX | |
| RELEASE_PREFIX = build/release/ | |
| DEBUG_PREFIX = build/debug/ | |
| ifeq "$(strip $(filter debug, $(MAKECMDGOALS)))" "debug" | |
| PREFIX = $(DEBUG_PREFIX) | |
| else | |
| PREFIX = $(RELEASE_PREFIX) | |
| endif | |
| EXECUTABLE = $(PREFIX)main.exe | |
| ifeq "$(strip $(filter test, $(MAKECMDGOALS)))" "test" | |
| # excluding main.o from OBJS for test because of main function collisions | |
| OBJS = $(addprefix $(PREFIX), $(filter-out $(MAIN_OBJ), $(notdir $(SRCS:.cpp=.o)))) | |
| else | |
| OBJS = $(addprefix $(PREFIX), $(notdir $(SRCS:.cpp=.o))) | |
| endif | |
| # test vars | |
| TEST_PREFIX = $(TEST_PATH)build/ | |
| TEST_SRCS = $(wildcard $(TEST_PATH)*.cpp) # get all .cpp in src dir | |
| TEST_OBJS = $(addprefix $(TEST_PREFIX), $(notdir $(TEST_SRCS:.cpp=.o))) | |
| TEST_EXECUTABLE = $(TEST_PREFIX)tests.exe | |
| .PHONY: run release debug build clean | |
| run: release | |
| @echo ------------- | |
| $(EXECUTABLE) | |
| @echo ------------- | |
| release: CFLAGS := -D NDEBUG $(CFLAGS) | |
| release: build | |
| debug: CFLAGS := -g $(CFLAGS) | |
| debug: build | |
| build: $(PREFIX) $(OBJS) | |
| $(CC) $(OBJS) $(LDFLAGS) -o $(EXECUTABLE) | |
| test: $(TEST_PREFIX) $(PREFIX) $(TEST_OBJS) $(OBJS) | |
| $(CC) $(TEST_OBJS) $(OBJS) $(TEST_LDFLAGS) -o $(TEST_EXECUTABLE) | |
| $(TEST_EXECUTABLE) | |
| $(PREFIX) $(TEST_PREFIX): | |
| mkdir -p $@ | |
| DEPS := $(OBJS:.o=.d) | |
| TEST_DEPS := $(TEST_OBJS:.o=.d) | |
| -include $(DEPS) | |
| -include $(TEST_DEPS) | |
| # -MMD flag create .d file with same name as .o | |
| $(PREFIX)%.o: $(SRC_PATH)%.cpp # for each .cpp in src_path making .o in prefix_path | |
| $(CC) -c -MMD $< $(CFLAGS) -o $@ | |
| $(TEST_PREFIX)%.o: $(TEST_PATH)%.cpp # for each .cpp in src_path making .o in prefix_path | |
| $(CC) -c -MMD $< $(TEST_CFLAGS) -o $@ | |
| clean: | |
| rm -rf $(RELEASE_PREFIX)* $(DEBUG_PREFIX)* | |
| rm -rf $(TEST_PREFIX)* |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment