Пример #1
0
        public CxxTarget(CxxBinary target)
        {
            Name = target.Name;

            OutputName   = target.OutputName;
            OutputSuffix = target.OutputSuffix;

            SourceFiles = target.SourceFiles;
            SourceFiles.Sort();

            foreach (var dependency in target.Dependencies)
            {
                switch (dependency.Value)
                {
                case string s:
                    unlinkedDependencies_.Add(s);
                    break;

                case Target t:
                    unlinkedDependencies_.Add(t.Name);
                    break;
                }
            }

            PreprocessorDefinitions = target.PreprocessorDefinitions;
        }
Пример #2
0
 protected override string GenerateCommandLineCommands()
 {
     CommandLineBuilder.AppendSwitchIfNotNull("-out ", OutputPath);
     // No trailing space, preprocessor definitions are passed as -d<Variable>=<Value>
     CommandLineBuilder.AppendArrayIfNotNull("-d", PreprocessorDefinitions.ToArray());
     CommandLineBuilder.AppendArrayIfNotNull("-ext ", Extensions.ToArray());
     CommandLineBuilder.AppendSwitchIfNotNull("-arch ", Arch);
     CommandLineBuilder.AppendFileNamesIfNotNull(SourceFiles.ToArray(), " ");
     return(CommandLineBuilder.ToString());
 }
            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 override void Generate(string Path)
        {
            if (!PreprocessorDefinitions.Contains("%(PreprocessorDefinitions)"))
            {
                PreprocessorDefinitions += "%(PreprocessorDefinitions)";
            }

            if (!IncludeDirectories.Contains("%(AdditionalIncludeDirectories)"))
            {
                IncludeDirectories += "%(AdditionalIncludeDirectories)";
            }

            if (!IncludeLibraryDirectories.Contains("%(AdditionalLibraryDirectories)"))
            {
                IncludeLibraryDirectories += "%(AdditionalLibraryDirectories)";
            }

            if (!IncludeLibraries.Contains("%(AdditionalDependencies)"))
            {
                IncludeLibraries += "%(AdditionalDependencies)";
            }

            base.Generate(Path);
        }
        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);
            }
        }