CMake: Remove magic configuration from CMake

Get rid of magic configuration handling in the CMakeProjectManager.

* Use CMakeCache.txt as the sole source of truth, do not keep
  a shadow copy of configuration in the .user file
* Have initial CMake arguments that are easy to edit in batch
  (Fixes: QTCREATORBUG-18179) used whenever no CMakeCache.txt
  file is in the build directory. These allow for any thing that
  can be passed to CMake on the command line.
  (Fixes: QTCREATORBUG-16296)
* Ask when changes to CMake configuration were not applied
  (Fixes: QTCREATORBUG-18504)
* Run cmake with arguments effecting its configuration only when
  the CMake settings are changed in the UI, run CMake without any
  special arguments in all other cases.
* Get rid of the confusing dialog used to keep settings in sync between
  what is in CMakeCache.txt and Creator (Fixes: QTCREATORBUG-23218)

Change-Id: I26d55be7df733f084f5691ecf7d7b4352f58b8e7
Reviewed-by: Cristian Adam <cristian.adam@qt.io>
This commit is contained in:
Tobias Hunger
2020-04-02 14:49:05 +02:00
parent c02a0037d5
commit 01b0d4f8f5
18 changed files with 433 additions and 505 deletions

View File

@@ -49,6 +49,17 @@ BuildDirParameters::BuildDirParameters(CMakeBuildConfiguration *bc)
{
QTC_ASSERT(bc, return );
const Utils::MacroExpander *expander = bc->macroExpander();
initialCMakeArguments = Utils::transform(bc->initialCMakeArguments(),
[expander](const QString &s) {
return expander->expand(s);
});
extraCMakeArguments = Utils::transform(bc->extraCMakeArguments(),
[expander](const QString &s) {
return expander->expand(s);
});
const Target *t = bc->target();
const Kit *k = t->kit();
const Project *p = t->project();
@@ -70,23 +81,6 @@ BuildDirParameters::BuildDirParameters(CMakeBuildConfiguration *bc)
environment.appendOrSetPath(settings->ninjaPath().toString());
cmakeToolId = CMakeKitAspect::cmakeToolId(k);
auto tc = ToolChainKitAspect::cxxToolChain(k);
if (tc)
cxxToolChainId = tc->id();
tc = ToolChainKitAspect::cToolChain(k);
if (tc)
cToolChainId = tc->id();
expander = k->macroExpander();
configuration = bc->configurationForCMake();
generator = CMakeGeneratorKitAspect::generator(k);
extraGenerator = CMakeGeneratorKitAspect::extraGenerator(k);
platform = CMakeGeneratorKitAspect::platform(k);
toolset = CMakeGeneratorKitAspect::toolset(k);
generatorArguments = CMakeGeneratorKitAspect::generatorArguments(k);
}
bool BuildDirParameters::isValid() const