re-organized a little bit, suggest use cmake