コード例 #1
0
        private void VCXProj(string name, Core.Cpp project, string directory)
        {
            var compiles = string.Empty;
            var includes = string.Empty;

            foreach (var filePath in project.FilePaths)
            {
                var compile = _templates["vcxproj.compile"];
                compile = compile.Replace("{{path}}", filePath);
                if (Core.Cpp.IsHeader(filePath))
                {
                    includes += compile.Replace("{{compile}}", "ClInclude");
                }
                else
                {
                    compiles += compile.Replace("{{compile}}", "ClCompile");
                }
            }

            var file    = new System.IO.StreamWriter(System.IO.Path.Combine(directory, name + ".vcxproj"));
            var vcxproj = _templates["vcxproj"];

            vcxproj = vcxproj.Replace("{{compiles}}", compiles.TrimEnd());
            vcxproj = vcxproj.Replace("{{includes}}", includes.TrimEnd());
            vcxproj = vcxproj.Replace("{{references}}", References(project));
            vcxproj = vcxproj.Replace("{{includedirecs}}", IncludeDirectories(project));
            vcxproj = vcxproj.Replace("{{definitions}}", Definitions(project));
            vcxproj = vcxproj.Replace("{{console}}", Console(project));
            vcxproj = vcxproj.Replace("{{guid}}", _guids[name]);
            vcxproj = vcxproj.Replace("{{name}}", name);
            vcxproj = vcxproj.Replace("{{binary}}", project.IsExe ? "Application" : "DynamicLibrary");
            vcxproj = vcxproj.Replace("{{libraries}}", Libraries(project));
            file.Write(vcxproj);
            file.Close();
        }
コード例 #2
0
ファイル: VCProj.cs プロジェクト: zebmason/ProjectIO
        public Core.Project Extract(Core.ILogger logger, Core.Paths paths, string filePath, Dictionary <string, string> filters, Dictionary <Core.Project, List <string> > dependencies, Dictionary <string, string> mapping)
        {
            var sourceDirec = paths.Value("SolutionDir");
            var proj        = this;

            var project = new Core.Cpp();

            project.IncludeDirectories.AddRange(proj.Includes());
            project.CompileDefinitions.AddRange(proj.CompileDefinitions());
            if (project.CompileDefinitions.Contains("_CONSOLE"))
            {
                project.CompileDefinitions.Remove("_CONSOLE");
                project.IsExe = true;
            }

            dependencies[project] = proj.Dependencies();

            foreach (var type in new string[] { "ClInclude", "ClCompile" })
            {
                foreach (var pair2 in proj.Files(false, type, sourceDirec))
                {
                    var fullName = pair2.Key;
                    var filter   = pair2.Value;

                    logger.Info("Appended \"{0}\"", fullName);
                    project.FilePaths.Add(fullName);
                    filters.Add(fullName, filter);
                }
            }

            mapping[filePath] = proj.Name;

            return(project);
        }
コード例 #3
0
        private string Libraries(Core.Cpp project)
        {
            if (project.Dependencies.Count == 0)
            {
                return(string.Empty);
            }

            return(string.Join(".lib;", project.Dependencies) + ".lib;");
        }
コード例 #4
0
        private static string IncludeDirectories(Core.Cpp project)
        {
            if (project.IncludeDirectories.Count == 0)
            {
                return(string.Empty);
            }

            return(string.Join(";", project.IncludeDirectories) + ";");
        }
コード例 #5
0
ファイル: Builder.cs プロジェクト: zebmason/ProjectIO
            public void Add(string command, string name, State state, IEnumerable <string> filePaths)
            {
                var project = new Core.Cpp()
                {
                    IsExe = command != "add_library"
                };

                project.CompileDefinitions.AddRange(state.CompileDefinitions);
                project.IncludeDirectories.AddRange(state.IncludeDirectories);
                project.FilePaths.AddRange(filePaths);
                _projects[name] = project;
            }
コード例 #6
0
        private void Filters(string name, Core.Cpp project, string directory)
        {
            var maps     = new HashSet <string>();
            var compiles = string.Empty;
            var includes = string.Empty;

            foreach (var filePath in project.FilePaths)
            {
                if (!_filters.ContainsKey(filePath))
                {
                    continue;
                }

                AddFilter(_filters[filePath], maps);
                var compile = _templates["vcxproj.filters.compile"];
                compile = compile.Replace("{{path}}", filePath).Replace("{{filter}}", _filters[filePath]);
                if (Core.Cpp.IsHeader(filePath))
                {
                    includes += compile.Replace("{{compile}}", "ClInclude");
                }
                else
                {
                    compiles += compile.Replace("{{compile}}", "ClCompile");
                }
            }

            if (maps.Count == 0)
            {
                return;
            }

            var filters = string.Empty;

            foreach (var item in maps)
            {
                var filter = _templates["vcxproj.filters.filter"];
                filters += filter.Replace("{{filter}}", item).Replace("{{guid}}", System.Guid.NewGuid().ToString());
            }

            var file            = new System.IO.StreamWriter(System.IO.Path.Combine(directory, name + ".vcxproj.filters"));
            var vcxproj_filters = _templates["vcxproj.filters"];

            vcxproj_filters = vcxproj_filters.Replace("{{filters}}", filters.TrimEnd());
            vcxproj_filters = vcxproj_filters.Replace("{{compiles}}", compiles.TrimEnd());
            vcxproj_filters = vcxproj_filters.Replace("{{includes}}", includes.TrimEnd());
            file.Write(vcxproj_filters);
            file.Close();
        }
コード例 #7
0
        private static string Definitions(Core.Cpp project)
        {
            var definitions = project.CompileDefinitions;

            if (project.IsExe)
            {
                definitions.Add("_CONSOLE");
            }

            if (definitions.Count == 0)
            {
                return(string.Empty);
            }

            return(string.Join(";", definitions) + ";");
        }