public Capture[] ToCaptures(string path, out string cfamilyLanguage) { var p = new Capture() { Executable = "cl.exe", Cwd = Path.GetDirectoryName(AbsoluteFilePath), CompilerVersion = CompilerVersion, X64 = IsPlatformX64(PlatformName), StdOut = "", }; var c = new Capture() { Executable = p.Executable, Cwd = p.Cwd, Env = new List <string>(), Cmd = new List <string>(), }; c.Env.Add("INCLUDE=" + IncludeDirectories); c.Cmd.Add(c.Executable); Add(c.Cmd, "true".Equals(IgnoreStandardIncludePath) ? "/X" : ""); AddRange(c.Cmd, "/I", AdditionalIncludeDirectories.Split(';')); AddRange(c.Cmd, "/FI", ForcedIncludeFiles.Split(';')); Add(c.Cmd, ConvertPrecompiledHeader(PrecompiledHeader, PrecompiledHeaderFile)); Add(c.Cmd, "true".Equals(UndefineAllPreprocessorDefinitions) ? "/u" : ""); AddRange(c.Cmd, "/D", PreprocessorDefinitions.Split(';')); AddRange(c.Cmd, "/U", UndefinePreprocessorDefinitions.Split(';')); Add(c.Cmd, ConvertCompileAsAndGetLanguage(CompileAs, path, out cfamilyLanguage)); Add(c.Cmd, ConvertCompileAsManaged(CompileAsManaged)); Add(c.Cmd, "true".Equals(CompileAsWinRT) ? "/ZW" : ""); Add(c.Cmd, "true".Equals(DisableLanguageExtensions) ? "/Za" : ""); // defines macro "__STDC__" when compiling C Add(c.Cmd, "false".Equals(TreatWChar_tAsBuiltInType) ? "/Zc:wchar_t-" : ""); // undefines macros "_NATIVE_WCHAR_T_DEFINED" and "_WCHAR_T_DEFINED" Add(c.Cmd, "false".Equals(ForceConformanceInForLoopScope) ? "/Zc:forScope-" : ""); Add(c.Cmd, "true".Equals(OpenMPSupport) ? "/openmp" : ""); Add(c.Cmd, ConvertRuntimeLibrary(RuntimeLibrary)); Add(c.Cmd, ConvertExceptionHandling(ExceptionHandling)); Add(c.Cmd, ConvertEnableEnhancedInstructionSet(EnableEnhancedInstructionSet)); Add(c.Cmd, "true".Equals(OmitDefaultLibName) ? "/Zl" : ""); // defines macro "_VC_NODEFAULTLIB" Add(c.Cmd, "false".Equals(RuntimeTypeInfo) ? "/GR-" : ""); // undefines macro "_CPPRTTI" Add(c.Cmd, ConvertBasicRuntimeChecks(BasicRuntimeChecks)); Add(c.Cmd, ConvertLanguageStandard(LanguageStandard)); // TODO Q: what if it contains space in double quotes? AddRange(c.Cmd, AdditionalOptions.Split(' ')); c.Cmd.Add(AbsoluteFilePath); return(new Capture[] { p, c }); }