I am trying to extend Boost Build to compile C# files using csc.exe on Windows and msc (Mono compiler) on Linux and OS X.

First, for backward compatibility reasons, I am using version 1.49.0 of boost and building Boost Build v2 using the source provided in that distribution.

The main issues I'm running into are the following:
1) How do I set up platform-dependent compiler names and option delimiters (/ for windows and - for other OS's)?
2) How do I create a "library" that is called <library name>.dll on all platforms rather than, say, lib<library name>.dylib on OS X?
3) Most importantly, how do I get the right path to the output of a target? When I do the following on OS X:

feature cs-reference : : free dependency path ;
flags mcs.make-exe CS_REFERENCE <cs-reference> ;
actions make-exe
{
  mcs -target:exe -r:$(CS_REFERENCE) -out:$(<) $(>)
}

and my Jamfile has

lib cslib : cs_source
                  ;

exe test : test.cs
                    : <cs-reference>cslib
                    ;

and I do "bjam -n", I get

mcs -target:exe -r:<pbin/darwin-4.2.1/debug/address-model-64/threading-multi>libcslib.dylib -out:bin/darwin-4.2.1/debug/address-model-64/threading-multi/test test.cs

Note the spurious "<p" and ">" in the option "-r:". How do I get rid of that?