It's the same as on Windows - use System.Diagnostics.Process. Beware that if you redirect stdout/stderr and the buffers fill up (which is entirely possible using GCC) it can deadlock, so harvest those into StringBuilders.
var psi = new Process.StartInfo ("gcc", "-gcc -arguments") {
RedirectStandardError = true,
RedirectStandardOutput = true,
UseShellExecute = false,
};
var error = new System.Text.StringBuilder ();
var output = new System.Text.StringBuilder ();
var p = Process.Start (psi);
p.EnableRaisingEvents = true;
p.OutputDataReceived +=
(object s, DataReceivedEventArgs e) => output.Append (e.Data);
p.ErrorDataReceived +=
(object s, DataReceivedEventArgs e) => output.Append (e.Data);
p.WaitForExit ();
FWIW, you might like to consider using custom tasks for MSBuild (i.e. Mono's "xbuild") instead of NAnt, because MonoDevelop's project files are MSBuild files, and MonoDevelop has xbuild integration.