diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml
index 4eb987fc2..82f9caff4 100644
--- a/.github/workflows/CI.yml
+++ b/.github/workflows/CI.yml
@@ -71,3 +71,5 @@ jobs:
       if: contains(matrix.os, 'ubuntu') && contains(matrix.gcc_v, '9')
       run: |
         make -f Makefile.manual
+        make -f Makefile.manual test
+        make -f Makefile.manual clean
diff --git a/Makefile.manual b/Makefile.manual
index a3e59040e..3fd085ed6 100644
--- a/Makefile.manual
+++ b/Makefile.manual
@@ -1,17 +1,21 @@
 # Fortran stdlib Makefile
 
 FC = gfortran
-FCFLAGS=-O0
+FFLAGS = -Wall -Wextra -Wimplicit-interface -fPIC -g -fcheck=all
 
-.PHONY: all clean
+export FC
+export FFLAGS
 
-all: stdlib tests 
+.PHONY: all clean test
 
-stdlib:
-	$(MAKE) -f Makefile.manual FC=${FC} FCFLAGS=${FCFLAGS} --directory=src
+all:
+	$(MAKE) -f Makefile.manual --directory=src
+	$(MAKE) -f Makefile.manual --directory=src/tests
 
-tests: stdlib
-	$(MAKE) -f Makefile.manual FC=${FC} FCFLAGS=${FCFLAGS} --directory=src/tests
+test:
+	$(MAKE) -f Makefile.manual --directory=src/tests test
+	@echo
+	@echo "All tests passed."
 
 clean:
 	$(MAKE) -f Makefile.manual clean --directory=src
diff --git a/src/Makefile.manual b/src/Makefile.manual
index 05640fc34..0c27ff41c 100644
--- a/src/Makefile.manual
+++ b/src/Makefile.manual
@@ -1,20 +1,19 @@
+LIB = libstdlib.a
+
 OBJS = stdlib_experimental_ascii.o \
        stdlib_experimental_error.o \
        stdlib_experimental_io.o \
+	   f18estop.o
 
 .PHONY: all clean
-.SUFFIXES: .f90 .o
-
-all: $(OBJS)
 
-.f90.o:
-	$(FC) $(FCFLAGS) -c $<
+all: $(LIB)
 
-%.o: %.mod
-
-stdlib_experimental_ascii.o: stdlib_experimental_ascii.f90
-stdlib_experimental_error.o: stdlib_experimental_error.f90
-stdlib_experimental_io.o: stdlib_experimental_io.f90
+$(LIB): $(OBJS)
+	ar rcs $@ $(OBJS)
 
 clean:
-	$(RM) *.o *.mod
+	$(RM) $(LIB) $(OBJS) *.mod
+
+%.o: %.f90
+	$(FC) $(FFLAGS) -c $<
diff --git a/src/tests/Makefile.manual b/src/tests/Makefile.manual
index 2669a98f8..778f3a81a 100644
--- a/src/tests/Makefile.manual
+++ b/src/tests/Makefile.manual
@@ -1,13 +1,13 @@
-.PHONY: all clean
+.PHONY: all clean test
 
-all: ascii/test_ascii loadtxt/test_loadtxt
-
-ascii/test_ascii:
+all:
 	$(MAKE) -f Makefile.manual --directory=ascii
-
-loadtxt/test_loadtxt:
 	$(MAKE) -f Makefile.manual --directory=loadtxt
 
+test:
+	$(MAKE) -f Makefile.manual --directory=ascii test
+	$(MAKE) -f Makefile.manual --directory=loadtxt test
+
 clean:
 	$(MAKE) -f Makefile.manual --directory=ascii clean
 	$(MAKE) -f Makefile.manual --directory=loadtxt clean
diff --git a/src/tests/ascii/Makefile.manual b/src/tests/ascii/Makefile.manual
index f2d9e03c6..4d555cb19 100644
--- a/src/tests/ascii/Makefile.manual
+++ b/src/tests/ascii/Makefile.manual
@@ -1,17 +1,21 @@
+PROG = test_ascii
+OBJS = test_ascii.o
+
 CPPFLAGS = -I../..
-OBJS = ../../stdlib_experimental_ascii.o \
-       ../../stdlib_experimental_error.o
+LDFLAGS = -L../.. -lstdlib
 
-.PHONY: all clean
-.SUFFIXES: .f90 .o
+.PHONY: all clean test
 
-all: test_ascii
+all: $(PROG)
 
-test_ascii: test_ascii.f90 $(OBJS)
-	$(FC) $(FCFLAGS) $(CPPFLAGS) $< -o $@ $(OBJS)
+$(PROG): $(OBJS)
+	$(FC) $(FFLAGS) $(CPPFLAGS) -o $@ $(OBJS) $(LDFLAGS)
 
-%.o: %.mod
+test:
+	./$(PROG)
 
 clean:
-	$(RM) test_ascii
-	$(RM) *.o *.mod
+	$(RM) $(PROG) $(OBJS) *.mod
+
+%.o: %.f90
+	$(FC) $(FFLAGS) $(CPPFLAGS) -c $<
diff --git a/src/tests/loadtxt/Makefile.manual b/src/tests/loadtxt/Makefile.manual
index 716f41678..f86861866 100644
--- a/src/tests/loadtxt/Makefile.manual
+++ b/src/tests/loadtxt/Makefile.manual
@@ -1,20 +1,25 @@
 CPPFLAGS = -I../..
-OBJS = ../../stdlib_experimental_error.o \
-       ../../stdlib_experimental_io.o
+LDFLAGS = -L../.. -lstdlib
 
-.PHONY: all clean
-.SUFFIXES: .f90 .o
+.PHONY: all clean test
 
-all: test_loadtxt test_savetxt
+PROGS = test_loadtxt test_savetxt test_loadtxt_qp test_savetxt_qp
+OBJS = $(PROGS:=.o)
 
-test_loadtxt: test_loadtxt.f90 $(OBJS)
-	$(FC) $(FCFLAGS) $(CPPFLAGS) $< -o $@ $(OBJS)
 
-test_savetxt: test_savetxt.f90 $(OBJS)
-	$(FC) $(FCFLAGS) $(CPPFLAGS) $< -o $@ $(OBJS)
+all: $(PROGS)
 
-%.o: %.mod
+$(PROGS): %: %.o
+	$(FC) $(FFLAGS) $(CPPFLAGS) -o $@ $^ $(LDFLAGS)
+
+test:
+	./test_loadtxt
+	./test_loadtxt_qp
+	./test_savetxt
+	./test_savetxt_qp
 
 clean:
-	$(RM) test_loadtxt test_savetxt
-	$(RM) *.o *.mod
+	$(RM) $(PROGS) $(OBJS) tmp.dat tmp_qp.dat
+
+%.o: %.f90
+	$(FC) $(FFLAGS) $(CPPFLAGS) -c $<