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