Files
ProjectEulerCPP/makefile

53 lines
1.6 KiB
Makefile

NUMCORES = $(shell grep -c "^processor" /proc/cpuinfo)
NUMCORESWIN = ${NUMBER_OF_PROCESSORS}
LIBFLAGS = -shared -std=c++17 -O3 -fPIC -Wall
EXEFLAGS = -Wall -std=c++11 -O3 -Wl,-rpath,'$$ORIGIN/lib'
LINKEDLIBS = -lgmp -lgmpxx
PROBLEM_NUMBERS = 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 67
PROBLEM_FILES = $(patsubst %,Source/libProblem%.cpp,$(PROBLEM_NUMBERS))
LIBDIR = ./lib
LIBS = $(patsubst %, -lProblem%,$(PROBLEM_NUMBERS))
#Linux makes
all: libsMulti ProjectEuler
libs: directory $(patsubst %, $(LIBDIR)/libProblem%.so,$(PROBLEM_NUMBERS))
benchmark: libsMulti ProjectEulerBenchmark
#Windows makes
windows: allWindows
allWindows: libsWindowsMulti ProjectEuler moveBin
libsWindows: directory $(patsubst %, $(LIBDIR)/libProblem%.a,$(PROBLEM_NUMBERS))
windowsBenchmark: libsWindowsMulti ProjectEulerBenchmark moveBin
#Non-build jobs
directory:
mkdir -p $(LIBDIR)
moveBin:
mv ProjectEuler.exe lib/ProjectEuler.exe
#Building the Libraries
$(LIBDIR)/libProblem%.so: Source/Problem%.cpp
$(CXX) $(LIBFLAGS) -o $@ $< $(LINKEDLIBS)
libsMulti:
$(MAKE) libs -j $(NUMCORES)
#Building the Libraries for Windows
$(LIBDIR)/libProblem%.a: Source/Problem%.cpp
$(CXX) $(LIBFLAGS) -o $@ $< $(LINKEDLIBS)
libsWindowsMulti:
$(MAKE) libsWindows -j $(NUMCORESWIN)
#Building the executable
ProjectEuler: main.cpp
$(CXX) $(EXEFLAGS) -o $@.exe $< -L $(LIBDIR) $(LIBS) $(LINKEDLIBS)
ProjectEulerBenchmark: benchmark.cpp
$(CXX) $(EXEFLAGS) -o ProjectEuler.exe $< -L $(LIBDIR) $(LIBS) $(LINKEDLIBS)
#Clean up/Remove all files and folders created
.PHONY: clean
clean:
rm -f lib/* ProjectEuler.exe
rmdir lib