CMakeBuildConfiguration *CMakeBuildConfigurationFactory::create(ProjectExplorer::Target *parent, const Core::Id id, const QString &name) { if (!canCreate(parent, id)) return 0; CMakeProject *project = static_cast<CMakeProject *>(parent->project()); bool ok = true; QString buildConfigurationName = name; if (buildConfigurationName.isNull()) buildConfigurationName = QInputDialog::getText(0, tr("New Configuration"), tr("New configuration name:"), QLineEdit::Normal, QString(), &ok); buildConfigurationName = buildConfigurationName.trimmed(); if (!ok || buildConfigurationName.isEmpty()) return 0; CMakeOpenProjectWizard::BuildInfo info; info.sourceDirectory = project->projectDirectory(); info.environment = Utils::Environment::systemEnvironment(); parent->kit()->addToEnvironment(info.environment); info.buildDirectory = project->shadowBuildDirectory(project->document()->fileName(), parent->kit(), buildConfigurationName); info.kit = parent->kit(); info.useNinja = false; // This is ignored anyway CMakeOpenProjectWizard copw(project->projectManager(), CMakeOpenProjectWizard::ChangeDirectory, info); if (copw.exec() != QDialog::Accepted) return 0; CMakeBuildConfiguration *bc = new CMakeBuildConfiguration(parent); bc->setDisplayName(buildConfigurationName); ProjectExplorer::BuildStepList *buildSteps = bc->stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD); ProjectExplorer::BuildStepList *cleanSteps = bc->stepList(ProjectExplorer::Constants::BUILDSTEPS_CLEAN); MakeStep *makeStep = new MakeStep(buildSteps); buildSteps->insertStep(0, makeStep); MakeStep *cleanMakeStep = new MakeStep(cleanSteps); cleanSteps->insertStep(0, cleanMakeStep); cleanMakeStep->setAdditionalArguments(QLatin1String("clean")); cleanMakeStep->setClean(true); bc->setBuildDirectory(copw.buildDirectory()); bc->setUseNinja(copw.useNinja()); // Default to all if (project->hasBuildTarget(QLatin1String("all"))) makeStep->setBuildTarget(QLatin1String("all"), true); return bc; }
void CMakeBuildSettingsWidget::runCMake() { if (!ProjectExplorer::ProjectExplorerPlugin::saveModifiedFiles()) return; CMakeProject *project = static_cast<CMakeProject *>(m_buildConfiguration->target()->project()); CMakeManager *manager = static_cast<CMakeManager *>(project->projectManager()); CMakeBuildInfo info(m_buildConfiguration); CMakeOpenProjectWizard copw(Core::ICore::mainWindow(), manager, CMakeOpenProjectWizard::WantToUpdate, &info); if (copw.exec() == QDialog::Accepted) project->parseCMakeLists(); }
void CMakeBuildSettingsWidget::openChangeBuildDirectoryDialog() { CMakeProject *project = static_cast<CMakeProject *>(m_buildConfiguration->target()->project()); CMakeManager *manager = static_cast<CMakeManager *>(project->projectManager()); CMakeBuildInfo info(m_buildConfiguration); CMakeOpenProjectWizard copw(Core::ICore::mainWindow(), manager, CMakeOpenProjectWizard::ChangeDirectory, &info); if (copw.exec() == QDialog::Accepted) { project->changeBuildDirectory(m_buildConfiguration, copw.buildDirectory()); m_buildConfiguration->setUseNinja(copw.useNinja()); m_pathLineEdit->setText(m_buildConfiguration->rawBuildDirectory().toString()); } }