1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
     13
     14
     15
     16
     17
     18
     19
     20
     21
     22
     23
     24
     25
     26
     27
     28
     29
     30
     31
     32
     33
     34
     35
     36
     37
     38
     39
     40
Target :=   Nim
MainSources :=  Nim.cpp NimGame.cpp NimMove.cpp
SharedSrc :=    HumanNimPlayer.cpp OptimalNimPlayer.cpp
Sources :=  $(wildcard *.[ch]pp)
CPPFiles := $(wildcard *.cpp)
Objects :=  $(patsubst %.cpp,%.o,$(CPPFiles))
SharedObjs :=   $(patsubst %.cpp,%.so,$(SharedSrc))
MainObjs :=     $(patsubst %.cpp,%.o,$(MainSources))

CC :=       g++
CXX :=      g++
CXXFLAGS := -Wall -g
CPPFLAGS := -std=gnu++11
SHARED :=   -fPIC -shared
LDFLAGS :=  -rdynamic

.PHONY:     all depend clean realclean
all:        makefile $(Target) $(SharedObjs)
depend: ;   gcc-makedepend $(CPPFLAGS) $(CPPFiles)
makefile:   $(Sources)
        gcc-makedepend $(CPPFLAGS) $(CPPFiles)
clean: ;    rm -f $(Objects)
realclean:  clean
        rm -f $(Target) $(SharedObjs)

$(Target):  $(MainObjs)
        $(CXX) -o $@ $(LDFLAGS) $(MainObjs) $(LDLIBS)

$(SharedObjs):  %.so: %.cpp
        $(CXX) -o $@ $(SHARED) $(CPPFLAGS) $(CXXFLAGS) \
           $(LDFLAGS) $< $(LDLIBS)

# DO NOT DELETE
NimMove.o: NimMove.cpp NimMove.hpp
HumanNimPlayer.o: HumanNimPlayer.cpp HumanNimPlayer.hpp NimPlayer.hpp \
 NimGame.hpp NimMove.hpp
Nim.o: Nim.cpp NimMove.hpp NimGame.hpp NimPlayer.hpp
OptimalNimPlayer.o: OptimalNimPlayer.cpp OptimalNimPlayer.hpp \
 NimPlayer.hpp NimGame.hpp NimMove.hpp
NimGame.o: NimGame.cpp NimGame.hpp NimMove.hpp