Qt Creator 不会从外部生成的 .creator.user 文件加载设置 [英] Qt Creator doesn't load settings from externally generated .creator.user file
问题描述
我正在尝试为许多通用 Qt Creator 项目生成 .creator.user
文件.我正在使用自定义构建工具,并希望每个 Qt Creator 项目都使用自定义构建命令来调用此工具,这就是为什么我要弄乱 .creator.user
文件的原因.不幸的是,我生成的 .creator.user
文件被重命名为 .creator.user.1.3
并被 Qt Creator 忽略,然后生成默认的 .creator.user
不使用我的设置的文件.关于如何让 Qt Creator 正确加载我的设置的任何建议?
I am trying to generate .creator.user
files for many generic Qt Creator projects. I am using a custom build tool and would like to have each Qt Creator project use custom build commands to call this tool, which is why I'm messing with .creator.user
files. Unfortunately, the .creator.user
files I'm generated are being renamed .creator.user.1.3
and ignored by Qt Creator, which then generates default .creator.user
files that don't use my settings. Any suggestions for how to make Qt Creator correctly load my settings?
这是一个示例 .creator.user
文件.我已将工作目录名称更改为 @DIRECTORY@
;在实际文件中,这是一个实际目录.
Here is a sample .creator.user
file. I have changed the working directory names to @DIRECTORY@
; in the real files this is an actual directory.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by SwT 0.8.0, 12/21/2012 15:17:33. -->
<qtcreator>
<data>
<variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">SwT</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">SwT</value>
<value type="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">{86eb24f3-777f-41df-b796-d5d8d9a9739a}</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="QString" key="GenericProjectManager.GenericBuildConfiguration.BuildDirectory"></value>
<valuemap type="QVariantMap" key=with open(creatorf,'w') as f:
f.write('[General'"ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProcessStep.Arguments">build -j3</value>
<value type="QString" key="ProjectExplorer.ProcessStep.Command">swt</value>
<value type="QString" key="ProjectExplorer.ProcessStep.WorkingDirectory">@DIRECTORY@</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Custom Process Step</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.ProcessStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProcessStep.Arguments">clean</value>
<value type="QString" key="ProjectExplorer.ProcessStep.Command">swt</value>
<value type="QString" key="ProjectExplorer.ProcessStep.WorkingDirectory">@DIRECTORY@</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Custom Process Step</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.ProcessStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug</value>
<value type="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">GenericProjectManager.GenericBuildConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy locally</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="bool" key="Analyzer.Project.UseGlobal">true</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
<value type="int">0</value>
<value type="int">1</value>
<value type="int">2</value>
<value type="int">3</value>
<value type="int">4</value>
<value type="int">5</value>
<value type="int">6</value>
<value type="int">7</value>
<value type="int">8</value>
<value type="int">9</value>
<value type="int">10</value>
<value type="int">11</value>
<value type="int">12</value>
<value type="int">13</value>
<value type="int">14</value>
</valuelist>
<value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.Arguments"></value>
<value type="int" key="ProjectExplorer.CustomExecutableRunConfiguration.BaseEnvironmentBase">2</value>
<value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.Executable"></value>
<value type="bool" key="ProjectExplorer.CustomExecutableRunConfiguration.UseTerminal">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.CustomExecutableRunConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.WorkingDirectory">%{buildDir}</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Custom Executable</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.CustomExecutableRunConfiguration</value>
<value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
<value type="bool" key="RunConfiguration.UseCppDebugger">true</value>
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.TargetCount</variable>
<value type="int">1</value>
</data>
<data>
<variable>ProjectExplorer.Project.Updater.EnvironmentId</variable>
<value type="QString">{250c1e28-1243-4796-af2e-509ff8b0cce9}</value>
</data>
<data>
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
<value type="int">12</value>
</data>
</qtcreator>
推荐答案
Creator 在发现 .user 文件需要升级时生成 .user.version 文件.理由是这样的:如果您运行一个 Creator 版本并为此配置了您的项目,并且您想要例如测试一个新的 beta 版本,那么这很可能需要更改配置.因此,它会将您当前的设置复制到 .user.version,然后更新 .user 中的所有内容.
Creator generates .user.version files when it finds the .user file to be in need of upgrading. The reasoning is this: If you run an version of Creator and have your project configured for that and you want to e.g. test a new beta release, then that will most likely require changes to the configuration. So it copies your current settings to .user.version and then updates whatever is in .user.
所以您似乎生成了旧版本的 .user 文件.虽然创建者试图保持一切完好无损,但升级可能会出错,尤其是在转换过程中经历几个步骤时(从 1.3 到 2.0,再到 2.1,...).
So you seem to be generating an old version of the .user file. While creator tries to keep everything intact, upgrades can go wrong, especially when going through several steps in the conversion process (going from 1.3 to 2.0, to 2.1, ...).
我建议为您的 .user-file 创建者使用更新的模板,然后从该模板开始.如果您设置了目标/工具包/构建步骤等,如果创建者认为它们已损坏,它也会将它们丢弃并重新生成它们,因此请确保它们确实有效.
I recommend using a newer template for your .user-file creator and starting with that. If you set up targets/kits/build steps, etc. creator will also throw them out and regenerate them if it thinks they are broken, so make sure they are indeed valid.
您也可以考虑将一些设置移动到 .shared 文件中.这些与 .user 文件重新组合(.user 优先),可用于在第一次打开项目时初始化设置.由于创建者对 Qt 版本等使用特定于实例的 id,这还不能很好地设置目标,但是使用 2.6 和套件,如果您确保每个用户都有带有相同的 ID(例如,使用 Qt 5 版本中的 ID).
You might also consider to move some settings into .shared files. These get recombined with the .user file (the .user has precedence) and can be used to initialize settings when the project is opened for the first time. Since creator uses instance-specific ids for Qt versions, etc. that does not work too well to set up targets yet, but with 2.6 and the kits you can get pretty far there, too, if you make sure every user has kits with the same Ids (e.g. by using those from the Qt 5 version).
PS:确保添加 ProjectExplorer.Project.Updater.FileVersion 变量,该变量定义文件中使用的架构版本.
这篇关于Qt Creator 不会从外部生成的 .creator.user 文件加载设置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!