CMake: Add a way to provide options to CMake --build

Add a way to provide options to cmake --build in addition to the
already existing option to the build tool (separated by -- from the
cmake arguments).

I decided to have these two separate to ease upgrading from older
Creator versions.

Task-number: QTCREATORBUG-24088
Change-Id: If989f9942498055312ba0e11e7d80c2b5ece269d
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
This commit is contained in:
Tobias Hunger
2020-06-02 17:23:47 +02:00
parent bd4c9ea250
commit 10b63683fc
2 changed files with 33 additions and 5 deletions

View File

@@ -53,6 +53,7 @@ namespace CMakeProjectManager {
namespace Internal {
const char BUILD_TARGETS_KEY[] = "CMakeProjectManager.MakeStep.BuildTargets";
const char CMAKE_ARGUMENTS_KEY[] = "CMakeProjectManager.MakeStep.CMakeArguments";
const char TOOL_ARGUMENTS_KEY[] = "CMakeProjectManager.MakeStep.AdditionalArguments";
const char ADD_RUNCONFIGURATION_ARGUMENT_KEY[] = "CMakeProjectManager.MakeStep.AddRunConfigurationArgument";
const char ADD_RUNCONFIGURATION_TEXT[] = "Current executable";
@@ -66,6 +67,7 @@ public:
private:
void itemChanged(QListWidgetItem *);
void cmakeArgumentsEdited();
void toolArgumentsEdited();
void updateDetails();
void buildTargetsChanged();
@@ -74,6 +76,7 @@ private:
QRadioButton *itemWidget(QListWidgetItem *item);
CMakeBuildStep *m_buildStep;
QLineEdit *m_cmakeArguments;
QLineEdit *m_toolArguments;
QListWidget *m_buildTargetsList;
};
@@ -122,6 +125,7 @@ QVariantMap CMakeBuildStep::toMap() const
QVariantMap map(AbstractProcessStep::toMap());
// Use QStringList for compatibility with old files
map.insert(BUILD_TARGETS_KEY, QStringList(m_buildTarget));
map.insert(CMAKE_ARGUMENTS_KEY, m_cmakeArguments);
map.insert(TOOL_ARGUMENTS_KEY, m_toolArguments);
return map;
}
@@ -131,6 +135,7 @@ bool CMakeBuildStep::fromMap(const QVariantMap &map)
const QStringList targetList = map.value(BUILD_TARGETS_KEY).toStringList();
if (!targetList.isEmpty())
m_buildTarget = targetList.last();
m_cmakeArguments = map.value(CMAKE_ARGUMENTS_KEY).toString();
m_toolArguments = map.value(TOOL_ARGUMENTS_KEY).toString();
if (map.value(ADD_RUNCONFIGURATION_ARGUMENT_KEY, false).toBool())
m_buildTarget = ADD_RUNCONFIGURATION_TEXT;
@@ -327,6 +332,16 @@ void CMakeBuildStep::setBuildTarget(const QString &buildTarget)
emit targetToBuildChanged();
}
QString CMakeBuildStep::cmakeArguments() const
{
return m_cmakeArguments;
}
void CMakeBuildStep::setCMakeArguments(const QString &list)
{
m_cmakeArguments = list;
}
QString CMakeBuildStep::toolArguments() const
{
return m_toolArguments;
@@ -361,6 +376,7 @@ Utils::CommandLine CMakeBuildStep::cmakeCommand(RunConfiguration *rc) const
}
cmd.addArgs({"--target", target});
cmd.addArgs(m_cmakeArguments, Utils::CommandLine::Raw);
if (!m_toolArguments.isEmpty()) {
cmd.addArg("--");
@@ -405,11 +421,12 @@ QStringList CMakeBuildStep::specialTargets()
// CMakeBuildStepConfigWidget
//
CMakeBuildStepConfigWidget::CMakeBuildStepConfigWidget(CMakeBuildStep *buildStep) :
BuildStepConfigWidget(buildStep),
m_buildStep(buildStep),
m_toolArguments(new QLineEdit),
m_buildTargetsList(new QListWidget)
CMakeBuildStepConfigWidget::CMakeBuildStepConfigWidget(CMakeBuildStep *buildStep)
: BuildStepConfigWidget(buildStep)
, m_buildStep(buildStep)
, m_cmakeArguments(new QLineEdit)
, m_toolArguments(new QLineEdit)
, m_buildTargetsList(new QListWidget)
{
setDisplayName(tr("Build", "CMakeProjectManager::CMakeBuildStepConfigWidget display name."));
@@ -418,6 +435,8 @@ CMakeBuildStepConfigWidget::CMakeBuildStepConfigWidget(CMakeBuildStep *buildStep
fl->setFieldGrowthPolicy(QFormLayout::ExpandingFieldsGrow);
setLayout(fl);
fl->addRow(tr("CMake arguments:"), m_cmakeArguments);
m_cmakeArguments->setText(m_buildStep->cmakeArguments());
fl->addRow(tr("Tool arguments:"), m_toolArguments);
m_toolArguments->setText(m_buildStep->toolArguments());
@@ -436,6 +455,7 @@ CMakeBuildStepConfigWidget::CMakeBuildStepConfigWidget(CMakeBuildStep *buildStep
buildTargetsChanged();
updateDetails();
connect(m_cmakeArguments, &QLineEdit::textEdited, this, &CMakeBuildStepConfigWidget::cmakeArgumentsEdited);
connect(m_toolArguments, &QLineEdit::textEdited, this, &CMakeBuildStepConfigWidget::toolArgumentsEdited);
connect(m_buildTargetsList, &QListWidget::itemChanged, this, &CMakeBuildStepConfigWidget::itemChanged);
connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::settingsChanged,
@@ -457,6 +477,11 @@ CMakeBuildStepConfigWidget::CMakeBuildStepConfigWidget(CMakeBuildStep *buildStep
&CMakeBuildStepConfigWidget::updateDetails);
}
void CMakeBuildStepConfigWidget::cmakeArgumentsEdited() {
m_buildStep->setCMakeArguments(m_cmakeArguments->text());
updateDetails();
}
void CMakeBuildStepConfigWidget::toolArgumentsEdited()
{
m_buildStep->setToolArguments(m_toolArguments->text());

View File

@@ -51,6 +51,8 @@ public:
bool buildsBuildTarget(const QString &target) const;
void setBuildTarget(const QString &target);
QString cmakeArguments() const;
void setCMakeArguments(const QString &list);
QString toolArguments() const;
void setToolArguments(const QString &list);
@@ -100,6 +102,7 @@ private:
QRegExp m_ninjaProgress;
QString m_ninjaProgressString;
QString m_buildTarget;
QString m_cmakeArguments;
QString m_toolArguments;
bool m_useNinja = false;
bool m_waiting = false;