diff --git a/src/compiler.sml b/src/compiler.sml
--- a/src/compiler.sml
+++ b/src/compiler.sml
@@ -1468,12 +1468,12 @@
                   else
                       " -O3"
 
-        val compile = Config.ccompiler ^ " " ^ Config.ccArgs ^ " " ^ Config.pthreadCflags ^ " -Wimplicit -Werror -Wno-unused-value"
+        val compile = (Settings.getCCompiler ()) ^ " " ^ Config.ccArgs ^ " " ^ Config.pthreadCflags ^ " -Wimplicit -Werror -Wno-unused-value"
                       ^ opt ^ " -I " ^ !Settings.configInclude
                       ^ " " ^ #compile proto
                       ^ " -c " ^ escapeFilename cname ^ " -o " ^ escapeFilename oname
 
-        val linker = Option.getOpt (linker, Config.ccompiler ^ " -Werror" ^ opt ^ " " ^ Config.ccArgs ^ " " ^ Config.pthreadCflags ^ " " ^ Config.pthreadLibs)
+        val linker = Option.getOpt (linker, (Settings.getCCompiler ()) ^ " -Werror" ^ opt ^ " " ^ Config.ccArgs ^ " " ^ Config.pthreadCflags ^ " " ^ Config.pthreadLibs)
 
         val ssl = if Settings.getStaticLinking () then
                       Config.openssl ^ " -ldl -lz"
diff --git a/src/main.mlton.sml b/src/main.mlton.sml
--- a/src/main.mlton.sml
+++ b/src/main.mlton.sml
@@ -61,12 +61,15 @@
             case args of
                 [] => ()
               | "-version" :: rest => 
-	        printVersion ()
+                  printVersion ()
               | "-numeric-version" :: rest =>
-	        printNumericVersion ()
+                  printNumericVersion ()
               | "-css" :: rest =>
                 (css := true;
                  doArgs rest)
+              | "-ccompiler" :: ccomp :: rest =>
+                (Settings.setCCompiler ccomp;
+                 doArgs rest)
               | "-demo" :: prefix :: rest =>
                 (demo := SOME (prefix, false);
                  doArgs rest)
diff --git a/src/settings.sig b/src/settings.sig
--- a/src/settings.sig
+++ b/src/settings.sig
@@ -256,4 +256,7 @@
 
     val setTimeFormat : string -> unit
     val getTimeFormat : unit -> string
+
+	val getCCompiler : unit -> string
+	val setCCompiler : string -> unit
 end
diff --git a/src/settings.sml b/src/settings.sml
--- a/src/settings.sml
+++ b/src/settings.sml
@@ -33,6 +33,11 @@
 val configInclude = ref Config.includ
 val configSitelisp = ref Config.sitelisp
 
+val configCCompiler = ref Config.ccompiler
+
+fun getCCompiler () = !configCCompiler
+fun setCCompiler cc = configCCompiler := cc
+
 fun libUr () = OS.Path.joinDirFile {dir = !configSrcLib,
                                     file = "ur"}
 fun libC () = OS.Path.joinDirFile {dir = !configSrcLib,
