Make project more consistent and write CMakeLists

Shamelessly ripped from GDCC, Thanks DavidPH :D