Redesign compiler related codes

To support different openmp flags of different compilers, I decide to
redesign compiler related codes to resemble package related codes.