general modular c++ cmake template