Should I use cscript, nmake, powershell, BAT, project files, or some combination of these? How could I implement a build solution that didn't just duplicate the same build instructions (source files, references, etc) in 2 different formats: one for windows and one for *nix?
I decided to keep things simple on Windows - just use a VS2005 solution with a bunch of project files. Then for *nix, I decided to make libxslt's xsltproc a build requirement, and generate the list of sources and references for the mono olive make machinery using a few simple XSL stylesheets.
For example, all the .sources files are now generated via build/sources.xsl. Which looks something like this:
<xsl:template match="/">I also have .references files for each assembly, also generated via an XSL file from the .csproj.
<xsl:apply-templates select="Project/ItemGroup/Compile"/>
</xsl:template>
<xsl:template match="Compile">
<xsl:value-of select="@Include" /><xsl:text> </xsl:text>
</xsl:template>
Now, I just maintain the VS2005 project files, and leave the *nix build stuff to the stylesheets. I added support for conditional sources using the Conditional attribute. Its working quite well thus far.