I think a better way would be to set the path once so it's used everywhere^^
Just update the path and other settings when the target changes... Though this doesn't work out of the box with virtual targets because they could contain more then one compiler (from different real targets)
Generally the virtual target stuff need a rewrite
Maybe switch on compile time to each and every real target
(ignoring the first as it should already be set, so the first real target of a virtual target is internally selected, after compiling that, select to the other ones and finally revert back the the first)