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 }); }
public CompilerSettings(CppProject project, ProjectItem prjItem) { ThreadHelper.ThrowIfNotOnUIThread(); var vcProject = prjItem.ContainingProject.Object as VCProject; var file = prjItem.Object; var activeSetting = project.GetActiveConfiguration(prjItem.ContainingProject); AddSettingsFromVCFile(this, file, activeSetting); AddSettingsFromVCProject(this, vcProject, activeSetting); if (FullIncludes.Count > 0) { var newList = CppProject.ExpandMacros(vcProject, activeSetting, FullIncludes.Aggregate((e, e1) => e + ";" + e1)).Split(';').ToList(); FullIncludes.Clear(); foreach (var x in newList) { if (x.Length > 0) { FullIncludes.Add(x); } } } if (AdditionalIncludeDirectories.Count > 0) { var newList = CppProject.ExpandMacros(vcProject, activeSetting, AdditionalIncludeDirectories.Aggregate((e, e1) => e + ";" + e1)).Split(';').ToList(); AdditionalIncludeDirectories.Clear(); foreach (var x in newList) { if (x.Length > 0) { AdditionalIncludeDirectories.Add(x); } } } if (PreprocessorDefinitions.Count > 0) { var newList = CppProject.ExpandMacros(vcProject, activeSetting, PreprocessorDefinitions.Aggregate((e, e1) => e + ";" + e1)).Split(';').ToList(); PreprocessorDefinitions.Clear(); foreach (var x in newList) { var t = x.Trim(); if (t == "\\\"\\\"") { continue; } if (t.Length > 0) { PreprocessorDefinitions.Add(t); } } } if (ForcedIncludeFiles.Count > 0) { var newList = CppProject.ExpandMacros(vcProject, activeSetting, ForcedIncludeFiles.Aggregate((e, e1) => e + ";" + e1)).Split(';').ToList(); ForcedIncludeFiles.Clear(); ForcedIncludeFiles.AddRange(newList); } }