forked from qt-creator/qt-creator
CMakePM: Use QML debugging and profiling option for initial parameters
Before this, if you set "QML debugging and profiling" to "Enable" and then triggered "Re-configure with initial parameters", it would at first not have QML debugging enabled, and only at some later point if you want to re-run CMake with the additional options. Change-Id: I5e8de7ebadbcb5a44b507ab9b953d4cbd8a3d063 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: <github-actions-qt-creator@cristianadam.eu> Reviewed-by: Cristian Adam <cristian.adam@qt.io>
This commit is contained in:
@@ -103,8 +103,9 @@ const char CONFIGURATION_KEY[] = "CMake.Configuration";
|
|||||||
const char DEVELOPMENT_TEAM_FLAG[] = "Ios:DevelopmentTeam:Flag";
|
const char DEVELOPMENT_TEAM_FLAG[] = "Ios:DevelopmentTeam:Flag";
|
||||||
const char PROVISIONING_PROFILE_FLAG[] = "Ios:ProvisioningProfile:Flag";
|
const char PROVISIONING_PROFILE_FLAG[] = "Ios:ProvisioningProfile:Flag";
|
||||||
const char CMAKE_OSX_ARCHITECTURES_FLAG[] = "CMAKE_OSX_ARCHITECTURES:DefaultFlag";
|
const char CMAKE_OSX_ARCHITECTURES_FLAG[] = "CMAKE_OSX_ARCHITECTURES:DefaultFlag";
|
||||||
const char CMAKE_QT6_TOOLCHAIN_FILE_ARG[] =
|
const char QT_QML_DEBUG_FLAG[] = "Qt:QML_DEBUG_FLAG";
|
||||||
"-DCMAKE_TOOLCHAIN_FILE:FILEPATH=%{Qt:QT_INSTALL_PREFIX}/lib/cmake/Qt6/qt.toolchain.cmake";
|
const char CMAKE_QT6_TOOLCHAIN_FILE_ARG[]
|
||||||
|
= "-DCMAKE_TOOLCHAIN_FILE:FILEPATH=%{Qt:QT_INSTALL_PREFIX}/lib/cmake/Qt6/qt.toolchain.cmake";
|
||||||
|
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
|
|
||||||
@@ -813,23 +814,39 @@ CMakeConfig CMakeBuildSettingsWidget::getQmlDebugCxxFlags()
|
|||||||
const bool enable = aspect->value() == TriState::Enabled;
|
const bool enable = aspect->value() == TriState::Enabled;
|
||||||
|
|
||||||
const CMakeConfig configList = m_buildSystem->configurationFromCMake();
|
const CMakeConfig configList = m_buildSystem->configurationFromCMake();
|
||||||
const QByteArrayList cxxFlags{"CMAKE_CXX_FLAGS", "CMAKE_CXX_FLAGS_DEBUG",
|
const QByteArrayList cxxFlagsPrev{"CMAKE_CXX_FLAGS",
|
||||||
"CMAKE_CXX_FLAGS_RELWITHDEBINFO"};
|
"CMAKE_CXX_FLAGS_DEBUG",
|
||||||
|
"CMAKE_CXX_FLAGS_RELWITHDEBINFO",
|
||||||
|
"CMAKE_CXX_FLAGS_INIT"};
|
||||||
|
const QByteArrayList cxxFlags{"CMAKE_CXX_FLAGS_INIT", "CMAKE_CXX_FLAGS"};
|
||||||
const QByteArray qmlDebug("-DQT_QML_DEBUG");
|
const QByteArray qmlDebug("-DQT_QML_DEBUG");
|
||||||
|
|
||||||
CMakeConfig changedConfig;
|
CMakeConfig changedConfig;
|
||||||
|
|
||||||
|
if (enable) {
|
||||||
|
const FilePath cmakeCache = m_buildSystem->cmakeBuildConfiguration()->buildDirectory().pathAppended("CMakeCache.txt");
|
||||||
|
|
||||||
|
// Only modify the CMAKE_CXX_FLAGS variable if the project was previously configured
|
||||||
|
// otherwise CMAKE_CXX_FLAGS_INIT will take care of setting the qmlDebug define
|
||||||
|
if (cmakeCache.exists()) {
|
||||||
for (const CMakeConfigItem &item : configList) {
|
for (const CMakeConfigItem &item : configList) {
|
||||||
if (!cxxFlags.contains(item.key))
|
if (!cxxFlags.contains(item.key))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
CMakeConfigItem it(item);
|
CMakeConfigItem it(item);
|
||||||
if (enable) {
|
|
||||||
if (!it.value.contains(qmlDebug)) {
|
if (!it.value.contains(qmlDebug)) {
|
||||||
it.value = it.value.append(' ').append(qmlDebug).trimmed();
|
it.value = it.value.append(' ').append(qmlDebug).trimmed();
|
||||||
changedConfig.append(it);
|
changedConfig.append(it);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
|
// Remove -DQT_QML_DEBUG from all configurations, potentially set by previous Qt Creator versions
|
||||||
|
for (const CMakeConfigItem &item : configList) {
|
||||||
|
if (!cxxFlagsPrev.contains(item.key))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
CMakeConfigItem it(item);
|
||||||
int index = it.value.indexOf(qmlDebug);
|
int index = it.value.indexOf(qmlDebug);
|
||||||
if (index != -1) {
|
if (index != -1) {
|
||||||
it.value.remove(index, qmlDebug.length());
|
it.value.remove(index, qmlDebug.length());
|
||||||
@@ -1173,6 +1190,16 @@ CMakeBuildConfiguration::CMakeBuildConfiguration(Target *target, Id id)
|
|||||||
}
|
}
|
||||||
return QLatin1String();
|
return QLatin1String();
|
||||||
});
|
});
|
||||||
|
macroExpander()->registerVariable(QT_QML_DEBUG_FLAG,
|
||||||
|
tr("The CMake flag for QML debugging, if enabled"),
|
||||||
|
[this] {
|
||||||
|
if (aspect<QtSupport::QmlDebuggingAspect>()->value()
|
||||||
|
== TriState::Enabled) {
|
||||||
|
return QLatin1String(
|
||||||
|
"-DQT_QML_DEBUG");
|
||||||
|
}
|
||||||
|
return QLatin1String();
|
||||||
|
});
|
||||||
|
|
||||||
addAspect<SourceDirectoryAspect>();
|
addAspect<SourceDirectoryAspect>();
|
||||||
addAspect<BuildTypeAspect>();
|
addAspect<BuildTypeAspect>();
|
||||||
@@ -1183,6 +1210,7 @@ CMakeBuildConfiguration::CMakeBuildConfiguration(Target *target, Id id)
|
|||||||
|
|
||||||
setInitializer([this, target](const BuildInfo &info) {
|
setInitializer([this, target](const BuildInfo &info) {
|
||||||
const Kit *k = target->kit();
|
const Kit *k = target->kit();
|
||||||
|
const QtSupport::QtVersion *qt = QtSupport::QtKitAspect::qtVersion(k);
|
||||||
|
|
||||||
CommandLine cmd = defaultInitialCMakeCommand(k, info.typeName);
|
CommandLine cmd = defaultInitialCMakeCommand(k, info.typeName);
|
||||||
m_buildSystem->setIsMultiConfig(CMakeGeneratorKitAspect::isMultiConfigGenerator(k));
|
m_buildSystem->setIsMultiConfig(CMakeGeneratorKitAspect::isMultiConfigGenerator(k));
|
||||||
@@ -1213,7 +1241,6 @@ CMakeBuildConfiguration::CMakeBuildConfiguration(Target *target, Id id)
|
|||||||
cmd.addArg("-DANDROID_STL:STRING=c++_shared");
|
cmd.addArg("-DANDROID_STL:STRING=c++_shared");
|
||||||
cmd.addArg("-DCMAKE_FIND_ROOT_PATH:PATH=%{Qt:QT_INSTALL_PREFIX}");
|
cmd.addArg("-DCMAKE_FIND_ROOT_PATH:PATH=%{Qt:QT_INSTALL_PREFIX}");
|
||||||
|
|
||||||
QtSupport::QtVersion *qt = QtSupport::QtKitAspect::qtVersion(k);
|
|
||||||
auto sdkLocation = bs->data(Android::Constants::SdkLocation).value<FilePath>();
|
auto sdkLocation = bs->data(Android::Constants::SdkLocation).value<FilePath>();
|
||||||
|
|
||||||
if (qt && qt->qtVersion() >= QtSupport::QtVersionNumber{6, 0, 0}) {
|
if (qt && qt->qtVersion() >= QtSupport::QtVersionNumber{6, 0, 0}) {
|
||||||
@@ -1229,7 +1256,6 @@ CMakeBuildConfiguration::CMakeBuildConfiguration(Target *target, Id id)
|
|||||||
|
|
||||||
const IDevice::ConstPtr device = DeviceKitAspect::device(k);
|
const IDevice::ConstPtr device = DeviceKitAspect::device(k);
|
||||||
if (CMakeBuildConfiguration::isIos(k)) {
|
if (CMakeBuildConfiguration::isIos(k)) {
|
||||||
QtSupport::QtVersion *qt = QtSupport::QtKitAspect::qtVersion(k);
|
|
||||||
if (qt && qt->qtVersion().majorVersion >= 6) {
|
if (qt && qt->qtVersion().majorVersion >= 6) {
|
||||||
// TODO it would be better if we could set
|
// TODO it would be better if we could set
|
||||||
// CMAKE_SYSTEM_NAME=iOS and CMAKE_XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH=YES
|
// CMAKE_SYSTEM_NAME=iOS and CMAKE_XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH=YES
|
||||||
@@ -1255,7 +1281,6 @@ CMakeBuildConfiguration::CMakeBuildConfiguration(Target *target, Id id)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (isWebAssembly(k) || isQnx(k) || isWindowsARM64(k)) {
|
if (isWebAssembly(k) || isQnx(k) || isWindowsARM64(k)) {
|
||||||
const QtSupport::QtVersion *qt = QtSupport::QtKitAspect::qtVersion(k);
|
|
||||||
if (qt && qt->qtVersion().majorVersion >= 6)
|
if (qt && qt->qtVersion().majorVersion >= 6)
|
||||||
cmd.addArg(CMAKE_QT6_TOOLCHAIN_FILE_ARG);
|
cmd.addArg(CMAKE_QT6_TOOLCHAIN_FILE_ARG);
|
||||||
}
|
}
|
||||||
@@ -1272,6 +1297,9 @@ CMakeBuildConfiguration::CMakeBuildConfiguration(Target *target, Id id)
|
|||||||
info.extraInfo.value<QVariantMap>().value(Constants::CMAKE_HOME_DIR)));
|
info.extraInfo.value<QVariantMap>().value(Constants::CMAKE_HOME_DIR)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (qt && qt->isQmlDebuggingSupported())
|
||||||
|
cmd.addArg("-DCMAKE_CXX_FLAGS_INIT:STRING=%{" + QLatin1String(QT_QML_DEBUG_FLAG) + "}");
|
||||||
|
|
||||||
m_buildSystem->setInitialCMakeArguments(cmd.splitArguments());
|
m_buildSystem->setInitialCMakeArguments(cmd.splitArguments());
|
||||||
m_buildSystem->setCMakeBuildType(info.typeName);
|
m_buildSystem->setCMakeBuildType(info.typeName);
|
||||||
});
|
});
|
||||||
|
Reference in New Issue
Block a user