A "makefile" is a list of instructions for "make" on how to build:
0. The objects that are generated from every source file. This is accomplished by the compiler.
1. The libraries and or executables that you are building (if any). Keep in mind, a library is a collection of objects that you've compiled. This is accomplished by the linker (or archiver when building static libraries).
Since it's multiple programs that you'd have to call to build every single object and library, all this is compiled into a makefile that is processed by a helper program called "make".
CMake is a cross-platform simplified version of make (supports various OS's and cross-compiling, targeting a different architecture than the one you're building on). It builds in a lot of the library search routines that weren't readily available in make and just makes the whole process a lot easier and cleaner to deal with (allows out-of-source builds to keep your source clean of build products). The product of running CMake is a set of linked makefiles.
In a typical cmake build you'd...
0. Create a build directory to put everything in (this is where "out-of-source" building comes in):
cd /source/path
mkdir build
cd build
cmake ../ -DCMAKE_INSTALL_PREFIX=/usr/local/
1. Call make to compile and link (use -j argument to use more threads)
make
2. Call make w/ install argument to install to configured path
make install