Thanks for the reply.
During the weekend I looked into it, and was able to understand it.
CompileOptionBase is a base class for anything that needs support for getting/setting options. It includes the options for entier CompilerSet including compileroptions, includedirs, linkeroptions etc.
The Compiler, Project, and Target classes are derived from it since they need this support.
While CompilerOptions is just an array of CompOption *, which is meant for options listed in checkboxes list in Compiler Flags tab.