forked from qt-creator/qt-creator
Merge remote-tracking branch 'origin/4.15'
Conflicts: src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp src/plugins/debugger/gdb/gdboptionspage.cpp Change-Id: I4149e860b6842ea63bff3a7eb9632b7a6c2919d8
This commit is contained in:
@@ -178,6 +178,16 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildConfiguration *bc)
|
||||
m_configModel->flush(); // clear out config cache...;
|
||||
});
|
||||
|
||||
auto buildTypeAspect = bc->aspect<BuildTypeAspect>();
|
||||
connect(buildTypeAspect, &BaseAspect::changed, this, [this, buildTypeAspect]() {
|
||||
if (!m_buildConfiguration->isMultiConfig()) {
|
||||
CMakeConfig config;
|
||||
config << CMakeConfigItem("CMAKE_BUILD_TYPE", buildTypeAspect->value().toUtf8());
|
||||
|
||||
m_configModel->setBatchEditConfiguration(config);
|
||||
}
|
||||
});
|
||||
|
||||
auto qmlDebugAspect = bc->aspect<QtSupport::QmlDebuggingAspect>();
|
||||
connect(qmlDebugAspect, &QtSupport::QmlDebuggingAspect::changed, this, [this]() {
|
||||
updateButtonState();
|
||||
@@ -298,6 +308,7 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildConfiguration *bc)
|
||||
Form {
|
||||
buildDirAspect, Break(),
|
||||
bc->aspect<InitialCMakeArgumentsAspect>(), Break(),
|
||||
bc->aspect<BuildTypeAspect>(), Break(),
|
||||
qmlDebugAspect
|
||||
},
|
||||
Space(10),
|
||||
@@ -740,7 +751,7 @@ static QStringList defaultInitialCMakeArguments(const Kit *k, const QString buil
|
||||
|
||||
// CMAKE_BUILD_TYPE:
|
||||
if (!buildType.isEmpty() && !CMakeGeneratorKitAspect::isMultiConfigGenerator(k)) {
|
||||
initialArgs.append(QString::fromLatin1("-DCMAKE_BUILD_TYPE:String=%1").arg(buildType));
|
||||
initialArgs.append(QString::fromLatin1("-DCMAKE_BUILD_TYPE:STRING=%1").arg(buildType));
|
||||
}
|
||||
|
||||
Internal::CMakeSpecificSettings *settings
|
||||
@@ -1246,12 +1257,56 @@ FilePath CMakeBuildConfiguration::sourceDirectory() const
|
||||
|
||||
QString CMakeBuildConfiguration::cmakeBuildType() const
|
||||
{
|
||||
return aspect<BuildTypeAspect>()->value();
|
||||
if (!isMultiConfig()) {
|
||||
auto configChanges = configurationChanges();
|
||||
auto it = std::find_if(configChanges.begin(), configChanges.end(),
|
||||
[](const CMakeConfigItem &item) { return item.key == "CMAKE_BUILD_TYPE";});
|
||||
if (it != configChanges.end())
|
||||
const_cast<CMakeBuildConfiguration*>(this)
|
||||
->setCMakeBuildType(QString::fromUtf8(it->value));
|
||||
}
|
||||
|
||||
QString cmakeBuildType = aspect<BuildTypeAspect>()->value();
|
||||
|
||||
const Utils::FilePath cmakeCacheTxt = buildDirectory().pathAppended("CMakeCache.txt");
|
||||
const bool hasCMakeCache = QFile::exists(cmakeCacheTxt.toString());
|
||||
CMakeConfig config;
|
||||
|
||||
if (cmakeBuildType == "Unknown") {
|
||||
// The "Unknown" type is the case of loading of an existing project
|
||||
// that doesn't have the "CMake.Build.Type" aspect saved
|
||||
if (hasCMakeCache) {
|
||||
QString errorMessage;
|
||||
config = CMakeBuildSystem::parseCMakeCacheDotTxt(cmakeCacheTxt, &errorMessage);
|
||||
} else {
|
||||
config = CMakeConfigItem::itemsFromArguments(initialCMakeArguments());
|
||||
}
|
||||
} else if (!hasCMakeCache) {
|
||||
config = CMakeConfigItem::itemsFromArguments(initialCMakeArguments());
|
||||
}
|
||||
|
||||
if (!config.isEmpty()) {
|
||||
cmakeBuildType = QString::fromUtf8(CMakeConfigItem::valueOf("CMAKE_BUILD_TYPE", config));
|
||||
const_cast<CMakeBuildConfiguration*>(this)
|
||||
->setCMakeBuildType(cmakeBuildType);
|
||||
}
|
||||
|
||||
return cmakeBuildType;
|
||||
}
|
||||
|
||||
void CMakeBuildConfiguration::setCMakeBuildType(const QString &cmakeBuildType)
|
||||
void CMakeBuildConfiguration::setCMakeBuildType(const QString &cmakeBuildType, bool quiet)
|
||||
{
|
||||
aspect<BuildTypeAspect>()->setValue(cmakeBuildType);
|
||||
if (quiet) {
|
||||
aspect<BuildTypeAspect>()->setValueQuietly(cmakeBuildType);
|
||||
aspect<BuildTypeAspect>()->update();
|
||||
} else {
|
||||
aspect<BuildTypeAspect>()->setValue(cmakeBuildType);
|
||||
}
|
||||
}
|
||||
|
||||
bool CMakeBuildConfiguration::isMultiConfig() const
|
||||
{
|
||||
return m_buildSystem->isMultiConfig();
|
||||
}
|
||||
|
||||
namespace Internal {
|
||||
@@ -1282,6 +1337,9 @@ SourceDirectoryAspect::SourceDirectoryAspect()
|
||||
BuildTypeAspect::BuildTypeAspect()
|
||||
{
|
||||
setSettingsKey("CMake.Build.Type");
|
||||
setLabelText(tr("Build type:"));
|
||||
setDisplayStyle(LineEditDisplay);
|
||||
setDefaultValue("Unknown");
|
||||
}
|
||||
|
||||
} // namespace Internal
|
||||
|
||||
Reference in New Issue
Block a user