Skip to content

Instantly share code, notes, and snippets.

@nojima
Last active August 29, 2015 14:05
Show Gist options
  • Save nojima/47a3fab44ca13ef29e2a to your computer and use it in GitHub Desktop.
Save nojima/47a3fab44ca13ef29e2a to your computer and use it in GitHub Desktop.

Directory Structure

root/
  Makefile
  myprogram
  src/
    hoge.cpp
    hoge.h
  obj/
    hoge.o
    hoge.d
CXX = clang++
LANGUAGE_OPTIONS = -std=c++11
WARNING_OPTIONS = -Wall -Wextra -Weffc++ -Woverloaded-virtual
OPTIMIZATION_OPTIONS = -O3 -fno-omit-frame-pointer
CODE_GENERATION_OPTIONS = -fPIC
PREPROCESSOR_OPTIONS = -MMD -MP $(shell llvm-config --cppflags | sed -e 's/-DNDEBUG //')
DEBUGGING_OPTIONS = -gdwarf-3 -fsanitize=address
CXXFLAGS = $(LANGUAGE_OPTIONS) $(WARNING_OPTIONS) $(OPTIMIZATION_OPTIONS) $(CODE_GENERATION_OPTIONS) $(PREPROCESSOR_OPTIONS) $(DEBUGGING_OPTIONS)
LDFLAGS = -fsanitize=address $(shell llvm-config --ldflags)
LIBS = $(shell llvm-config --libs core)
SOURCES = $(wildcard src/*.cpp)
OBJECTS = $(patsubst src/%, obj/%, $(patsubst %.cpp, %.o, $(SOURCES)))
DEPENDS = $(patsubst %.o, %.d, $(OBJECTS))
TARGET = myprogram
$(TARGET): $(OBJECTS)
$(CXX) $(LDFLAGS) -o $@ $^ $(LIBS)
obj/%.o: src/%.cpp
@mkdir -p obj/
$(CXX) $(CXXFLAGS) -o $@ -c $<
clean:
rm -rf obj/ $(TARGET)
-include $(DEPENDS)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment