Skip to content

Instantly share code, notes, and snippets.

@dtoma
Created May 23, 2016 05:33
Show Gist options
  • Save dtoma/a23099954d62aa51c95383a5fea6b56c to your computer and use it in GitHub Desktop.
Save dtoma/a23099954d62aa51c95383a5fea6b56c to your computer and use it in GitHub Desktop.
Makefile Template (executable + tests)
# TODO:
# - build modes: release, debug
CXX := g++
EXECUTABLE := project.exe
EXECUTABLE_TESTS := project_tests.exe
INCLUDE := -I./deps
SOURCES :=
MAIN := main.cpp
TESTS := tests.cpp
OBJECTS := $(SOURCES:.cpp=.o)
MAIN_OBJECT := $(MAIN:.cpp=.o)
TESTS_OBJECT := $(TESTS:.cpp=.o)
MAIN_BUILD := $(OBJECTS) $(MAIN_OBJECT)
TESTS_BUILD := $(OBJECTS) $(TESTS_OBJECT)
CXXFLAGS := -std=c++14 \
-Wall \
-Wextra \
-Wshadow \
-Wnon-virtual-dtor \
-pedantic \
-Wold-style-cast \
-Wcast-align \
-Wunused \
-Woverloaded-virtual \
-Weffc++ \
-Wconversion \
-Werror \
-O3 \
-march=native
all: print_build_config $(SOURCES) $(EXECUTABLE)
print_build_config:
@echo "[ Flags ] $(CXXFLAGS)"
@echo "[ Directories ] $(INCLUDE)"
test: $(SOURCES) $(EXECUTABLE_TESTS)
$(EXECUTABLE): $(MAIN_BUILD)
@$(CXX) $(MAIN_BUILD) -o $@
@echo "[ Link ] $@"
$(EXECUTABLE_TESTS): $(TESTS_BUILD)
@$(CXX) $(TESTS_BUILD) -o $@
@echo "[ Link ] $@"
.cpp.o:
@$(CXX) $(CXXFLAGS) $(INCLUDE) $< -c -o $@
@echo "[ Build ] $@"
clean:
@rm -f $(OBJECTS) $(MAIN_OBJECT) $(TESTS_OBJECT) $(EXECUTABLE) $(EXECUTABLE_TESTS)
re: clean all test
.PHONY: all print_build_config test $(EXECUTABLE) $(EXECUTABLE_TESTS) clean re
@dtoma
Copy link
Author

dtoma commented Mar 1, 2017

Todo:

  • Replace .cpp.o rule with modern equivalent
  • Build using absolute paths
  • Add rules for gcov
  • Add optional LTO

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment