diff --git a/.gitignore b/.gitignore
index b38bf6ae02bacd5b2c6642e413b9754613bb1cc2..957eb9fa8aa8097c01391b2ed3be9a7a866ac6bd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,3 @@
-*.o
-*.a
-color_flow
-colortest
+build/
 *.png
 *.flo
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..cef29183b944adcab841e2f6f2f66d3987300abb
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,14 @@
+cmake_minimum_required(VERSION 3.14)
+
+project(flow-code LANGUAGES CXX)
+
+add_subdirectory(imageLib)
+
+
+add_executable(color_flow color_flow.cpp flowIO.cpp colorcode.cpp)
+target_include_directories(color_flow PRIVATE imageLib)
+target_link_libraries(color_flow PRIVATE imageLib PUBLIC png z)
+
+add_executable(colortest colortest.cpp colorcode.cpp)
+target_include_directories(colortest PRIVATE imageLib)
+target_link_libraries(colortest PRIVATE imageLib PUBLIC png z)
diff --git a/Makefile b/Makefile
deleted file mode 100644
index 7f9b5b82cc2e0d1b58f0638294b317787bcb273c..0000000000000000000000000000000000000000
--- a/Makefile
+++ /dev/null
@@ -1,24 +0,0 @@
-# Makefile for flow evaluation code
-
-SRC = flowIO.cpp colorcode.cpp colortest.cpp color_flow.cpp
-BIN = colortest color_flow
-
-IMGLIB = imageLib
-
-CC = g++
-WARN = -W -Wall
-OPT ?= -O3
-CPPFLAGS = $(OPT) $(WARN) -I$(IMGLIB)
-LDLIBS = -L$(IMGLIB) -lImg -lpng -lz
-EXE = $(SRC:.cpp=.exe)
-
-all: $(BIN)
-
-colortest: colortest.cpp colorcode.cpp
-color_flow: color_flow.cpp flowIO.cpp colorcode.cpp
-
-clean: 
-	rm -f core *.stackdump
-
-allclean: clean
-	rm -f $(BIN) $(EXE)
diff --git a/imageLib/CMakeLists.txt b/imageLib/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..d975ae03eca2033b5ab03028367125f96290d08a
--- /dev/null
+++ b/imageLib/CMakeLists.txt
@@ -0,0 +1 @@
+add_library(imageLib Convert.cpp Convolve.cpp Image.cpp ImageIO.cpp ImageIOpng.cpp RefCntMem.cpp)
diff --git a/imageLib/Makefile b/imageLib/Makefile
deleted file mode 100644
index 39e01fc04d2abb8d306239e2ad23087abc973fc8..0000000000000000000000000000000000000000
--- a/imageLib/Makefile
+++ /dev/null
@@ -1,33 +0,0 @@
-SRC = Convert.cpp Convolve.cpp Image.cpp ImageIO.cpp ImageIOpng.cpp RefCntMem.cpp
-
-CC = g++
-WARN = -W -Wall
-OPT ?= -O3
-CPPFLAGS = $(OPT) $(WARN)
-
-OBJ = $(SRC:.cpp=.o)
-
-all: libImg.a
-
-libImg.a: $(OBJ)
-	rm -f libImg.a
-	ar ruc libImg.a $(OBJ)
-	ranlib libImg.a
-
-clean: 
-	rm -f $(OBJ) core *.stackdump *.bak
-
-allclean: clean
-	rm -f libImg.a
-
-depend:
-	@makedepend -Y -- $(CPPFLAGS) -- $(SRC) 2>> /dev/null
-
-# DO NOT DELETE THIS LINE -- make depend depends on it.
-
-Convert.o: Image.h RefCntMem.h Error.h Convert.h
-Convolve.o: Image.h RefCntMem.h Error.h Convert.h Convolve.h
-Image.o: Image.h RefCntMem.h Error.h
-ImageIO.o: Image.h RefCntMem.h Error.h ImageIO.h
-ImageIOpng.o: Image.h RefCntMem.h Error.h
-RefCntMem.o: RefCntMem.h