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(); }
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); }
private string Libraries(Core.Cpp project) { if (project.Dependencies.Count == 0) { return(string.Empty); } return(string.Join(".lib;", project.Dependencies) + ".lib;"); }
private static string IncludeDirectories(Core.Cpp project) { if (project.IncludeDirectories.Count == 0) { return(string.Empty); } return(string.Join(";", project.IncludeDirectories) + ";"); }
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; }
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(); }
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) + ";"); }