From 34cb20862559eed3225fb0875b01aace38cbd3b6 Mon Sep 17 00:00:00 2001 From: giy <giy@omp-system.ru> Date: Thu, 19 Jan 2023 13:19:17 +0300 Subject: [PATCH] Правки генерации и удаления moc файлов: 1) Теперь в фильтре проекта GeneratedFiles создаются подфильтры для каждой конфигурации и платформы (актуально для конфигов CODE64). 2) Исправлено добавление и удаление moc конфигураций в vcxproj и vcxproj.filter файлах проектов (в старой версии плагина с этим была проблема и как следствие - возникали ошибки сборки связанные с moc'ами). 3) Теперь при выключении сборки проекта в Solution Property -> Configuration Properties для определенной конфигурации и разрядности не будут генерироватся moc файлы. --- QtVsTools.Core/QtProject.cs | 78 +++++++++++++++++++++++++++++++++----- 1 files changed, 67 insertions(+), 11 deletions(-) diff --git a/QtVsTools.Core/QtProject.cs b/QtVsTools.Core/QtProject.cs index a935f54..cbfb681 100644 --- a/QtVsTools.Core/QtProject.cs +++ b/QtVsTools.Core/QtProject.cs @@ -437,7 +437,8 @@ string description = "Uic'ing " + ProjectMacros.FileName + "..."; foreach (VCFileConfiguration config in (IVCCollection)file.FileConfigurations) { - + if (HelperFunctions.IsConfExcludeFromSolution(config)) + continue; switch (toolSettings) { case CustomTool.MSBuildTarget: AddUic4BuildStepMsBuild(config, description, uiFileMacro); @@ -667,6 +668,8 @@ if (hasDifferentMocFilePerPlatform && hasDifferentMocFilePerConfig) { foreach (VCFileConfiguration mocConf in (IVCCollection)mocFile.FileConfigurations) { + if (HelperFunctions.IsConfExcludeFromSolution(mocConf)) + continue; var projectCfg = mocConf.ProjectConfiguration as VCConfiguration; if (projectCfg.Name != vcConfig.Name || (IsMoccedFileIncluded(sourceFile) && !mocableIsCPP)) { @@ -680,6 +683,8 @@ } else if (hasDifferentMocFilePerPlatform) { foreach (VCFileConfiguration mocConf in (IVCCollection)mocFile.FileConfigurations) { + if (HelperFunctions.IsConfExcludeFromSolution(mocConf)) + continue; var projectCfg = mocConf.ProjectConfiguration as VCConfiguration; var mocConfPlatform = projectCfg.Platform as VCPlatform; if (projectCfg.ConfigurationName != vcConfig.ConfigurationName) @@ -698,6 +703,8 @@ } else if (hasDifferentMocFilePerConfig) { foreach (VCFileConfiguration mocConf in (IVCCollection)mocFile.FileConfigurations) { + if (HelperFunctions.IsConfExcludeFromSolution(mocConf)) + continue; var projectCfg = mocConf.ProjectConfiguration as VCConfiguration; var mocConfPlatform = projectCfg.Platform as VCPlatform; if (platformName != mocConfPlatform.Name) @@ -1039,6 +1046,8 @@ file.ItemType = QtMoc.ItemTypeName; if (HelperFunctions.IsSourceFile(file.FullPath)) { foreach (VCFileConfiguration config in (IVCCollection)file.FileConfigurations) { + if (HelperFunctions.IsConfExcludeFromSolution(config)) + continue; qtMsBuild.SetItemProperty(config, QtMoc.Property.DynamicSource, "input"); qtMsBuild.SetItemPropertyByName(config, "QtMocFileName", "%(Filename).moc"); } @@ -1066,8 +1075,11 @@ HelperFunctions.EnsureCustomBuildToolAvailable(mocFileItem); } - foreach (VCFileConfiguration config in (IVCCollection)file.FileConfigurations) + foreach (VCFileConfiguration config in (IVCCollection)file.FileConfigurations) { + if (HelperFunctions.IsConfExcludeFromSolution(config)) + continue; AddMocStepToConfiguration(sourceFile, config, toolSettings); + } } catch { throw new QtVSException(SR.GetString("QtProject_CannotAddMocStep", file.FullPath)); @@ -1161,6 +1173,8 @@ if (file == null) return false; foreach (VCFileConfiguration config in (IVCCollection)file.FileConfigurations) { + if (HelperFunctions.IsConfExcludeFromSolution(config)) + continue; var tool = HelperFunctions.GetCustomBuildTool(config); if (tool == null) return false; @@ -1408,6 +1422,8 @@ bool IsCppMocFileQtMsBuild(VCProject vcProj, VCFile vcFile, VCFile cppFile) { foreach (VCFileConfiguration fileConfig in (IVCCollection)vcFile.FileConfigurations) { + if (HelperFunctions.IsConfExcludeFromSolution(fileConfig)) + continue; string inputFile = qtMsBuild.GetPropertyValue(fileConfig, QtMoc.Property.InputFile); HelperFunctions.ExpandString(ref inputFile, fileConfig); if (HelperFunctions.PathIsRelativeTo(inputFile, cppFile.ItemName)) @@ -1707,7 +1723,16 @@ } } if (!subfilterFound) { - if (!vfilt.CanAddFilter(subfilterName)) + if (vfilt.CanAddFilter(subfilterName)) { + vfilt.AddFilter(subfilterName); + foreach (VCFilter subfilt in vfilt.Filters as IVCCollection) { + if (subfilt.Name.ToLower() == lowerSubFilterName) { + vfilt = subfilt; + break; + } + } + } + else throw new QtVSException($"Project cannot add filter {filter.Name}"); } } @@ -1759,22 +1784,47 @@ /// <param name="file">file</param> public void RemoveFileFromFilter(VCFile file, VCFilter filter) { - try { - filter.RemoveFile(file); - var fi = new FileInfo(file.FullPath); - if (fi.Exists) - fi.Delete(); - } catch { - } + + var fileName = file.FullPath; + + bool isSubFilter = false; + VCFilter subFlt = null; var subfilters = (IVCCollection)filter.Filters; for (var i = subfilters.Count; i > 0; i--) { + if (isSubFilter) + break; try { var subfilter = (VCFilter)subfilters.Item(i); - RemoveFileFromFilter(file, subfilter); + + foreach (VCFile subFile in (IVCCollection)subfilter.Files) { + isSubFilter = (subFile.FullPath.Contains(file.Name) && file.FullPath.Contains(subfilter.Name)); + if (isSubFilter) { + subFlt = subfilter; + break; + } + } + } catch { } } + + + try { + if (isSubFilter && subFlt != null) { + subFlt.RemoveFile(file); + } else { + filter.RemoveFile(file); + } + + var fi = new FileInfo(fileName); + if (fi.Exists) + fi.Delete(); + + + } catch { + } + } public void MoveFileToDeletedFolder(VCFile vcfile) @@ -2132,6 +2182,8 @@ public static void SetPCHOption(VCFile vcFile, pchOption option) { foreach (VCFileConfiguration config in vcFile.FileConfigurations as IVCCollection) { + if (HelperFunctions.IsConfExcludeFromSolution(config)) + continue; var compiler = CompilerToolWrapper.Create(config); compiler.SetUsePrecompiledHeader(option); } @@ -2140,6 +2192,8 @@ private static VCFileConfiguration GetVCFileConfigurationByName(VCFile file, string configName) { foreach (VCFileConfiguration cfg in (IVCCollection)file.FileConfigurations) { + if (HelperFunctions.IsConfExcludeFromSolution(cfg)) + continue; if (cfg.Name == configName) return cfg; } @@ -2284,6 +2338,8 @@ mocCmdChecker = new MocCmdChecker(); foreach (VCFileConfiguration config in (IVCCollection)vcfile.FileConfigurations) { + if (HelperFunctions.IsConfExcludeFromSolution(config)) + continue; try { string commandLine = ""; VCCustomBuildTool tool = null; -- Gitblit v1.9.1