forked from qt-creator/qt-creator
Add the ability to add Runconfigurations for cmake-targets we know about
Task: 250415
This commit is contained in:
@@ -207,30 +207,30 @@ void CMakeProject::parseCMakeLists()
|
|||||||
|
|
||||||
// Create run configurations for m_targets
|
// Create run configurations for m_targets
|
||||||
//qDebug()<<"Create run configurations of m_targets";
|
//qDebug()<<"Create run configurations of m_targets";
|
||||||
QMap<QString, QSharedPointer<CMakeRunConfiguration> > existingRunConfigurations;
|
QMultiMap<QString, QSharedPointer<CMakeRunConfiguration> > existingRunConfigurations;
|
||||||
foreach(QSharedPointer<ProjectExplorer::RunConfiguration> cmakeRunConfiguration, runConfigurations()) {
|
foreach(QSharedPointer<ProjectExplorer::RunConfiguration> cmakeRunConfiguration, runConfigurations()) {
|
||||||
if (QSharedPointer<CMakeRunConfiguration> rc = cmakeRunConfiguration.dynamicCast<CMakeRunConfiguration>()) {
|
if (QSharedPointer<CMakeRunConfiguration> rc = cmakeRunConfiguration.dynamicCast<CMakeRunConfiguration>()) {
|
||||||
existingRunConfigurations.insert(rc->title(), rc);
|
existingRunConfigurations.insert(rc->title(), rc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool setActive = false;
|
bool setActive = existingRunConfigurations.isEmpty();
|
||||||
foreach(const CMakeTarget &ct, m_targets) {
|
foreach(const CMakeTarget &ct, m_targets) {
|
||||||
if (ct.executable.isEmpty())
|
if (ct.executable.isEmpty())
|
||||||
continue;
|
continue;
|
||||||
if (ct.title.endsWith("/fast"))
|
if (ct.title.endsWith("/fast"))
|
||||||
continue;
|
continue;
|
||||||
QMap<QString, QSharedPointer<CMakeRunConfiguration> >::iterator it =
|
QList<QSharedPointer<CMakeRunConfiguration> > list = existingRunConfigurations.values(ct.title);
|
||||||
existingRunConfigurations.find(ct.title);
|
if (!list.isEmpty()) {
|
||||||
if (it != existingRunConfigurations.end()) {
|
|
||||||
// Already exists, so override the settings...
|
// Already exists, so override the settings...
|
||||||
QSharedPointer<CMakeRunConfiguration> rc = it.value();
|
foreach (QSharedPointer<CMakeRunConfiguration> rc, list) {
|
||||||
//qDebug()<<"Updating Run Configuration with title"<<ct.title;
|
//qDebug()<<"Updating Run Configuration with title"<<ct.title;
|
||||||
//qDebug()<<" Executable new:"<<ct.executable<< "old:"<<rc->executable();
|
//qDebug()<<" Executable new:"<<ct.executable<< "old:"<<rc->executable();
|
||||||
//qDebug()<<" WD new:"<<ct.workingDirectory<<"old:"<<rc->workingDirectory();
|
//qDebug()<<" WD new:"<<ct.workingDirectory<<"old:"<<rc->workingDirectory();
|
||||||
rc->setExecutable(ct.executable);
|
rc->setExecutable(ct.executable);
|
||||||
rc->setWorkingDirectory(ct.workingDirectory);
|
rc->setWorkingDirectory(ct.workingDirectory);
|
||||||
existingRunConfigurations.erase(it);
|
}
|
||||||
|
existingRunConfigurations.remove(ct.title);
|
||||||
} else {
|
} else {
|
||||||
// Does not exist yet
|
// Does not exist yet
|
||||||
//qDebug()<<"Adding new run configuration with title"<<ct.title;
|
//qDebug()<<"Adding new run configuration with title"<<ct.title;
|
||||||
@@ -238,13 +238,13 @@ void CMakeProject::parseCMakeLists()
|
|||||||
QSharedPointer<ProjectExplorer::RunConfiguration> rc(new CMakeRunConfiguration(this, ct.executable, ct.workingDirectory, ct.title));
|
QSharedPointer<ProjectExplorer::RunConfiguration> rc(new CMakeRunConfiguration(this, ct.executable, ct.workingDirectory, ct.title));
|
||||||
addRunConfiguration(rc);
|
addRunConfiguration(rc);
|
||||||
// The first one gets the honour of beeing the active one
|
// The first one gets the honour of beeing the active one
|
||||||
if (!setActive) {
|
if (setActive) {
|
||||||
setActiveRunConfiguration(rc);
|
setActiveRunConfiguration(rc);
|
||||||
setActive = true;
|
setActive = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
QMap<QString, QSharedPointer<CMakeRunConfiguration> >::const_iterator it =
|
QMultiMap<QString, QSharedPointer<CMakeRunConfiguration> >::const_iterator it =
|
||||||
existingRunConfigurations.constBegin();
|
existingRunConfigurations.constBegin();
|
||||||
for( ; it != existingRunConfigurations.constEnd(); ++it) {
|
for( ; it != existingRunConfigurations.constEnd(); ++it) {
|
||||||
QSharedPointer<CMakeRunConfiguration> rc = it.value();
|
QSharedPointer<CMakeRunConfiguration> rc = it.value();
|
||||||
@@ -282,8 +282,13 @@ QString CMakeProject::buildParser(const QString &buildConfiguration) const
|
|||||||
QStringList CMakeProject::targets() const
|
QStringList CMakeProject::targets() const
|
||||||
{
|
{
|
||||||
QStringList results;
|
QStringList results;
|
||||||
foreach (const CMakeTarget &ct, m_targets)
|
foreach (const CMakeTarget &ct, m_targets) {
|
||||||
|
if (ct.executable.isEmpty())
|
||||||
|
continue;
|
||||||
|
if (ct.title.endsWith("/fast"))
|
||||||
|
continue;
|
||||||
results << ct.title;
|
results << ct.title;
|
||||||
|
}
|
||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -526,6 +531,14 @@ void CMakeProject::restoreSettingsImpl(ProjectExplorer::PersistentSettingsReader
|
|||||||
parseCMakeLists(); // Gets the directory from the active buildconfiguration
|
parseCMakeLists(); // Gets the directory from the active buildconfiguration
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CMakeTarget CMakeProject::targetForTitle(const QString &title)
|
||||||
|
{
|
||||||
|
foreach(const CMakeTarget &ct, m_targets)
|
||||||
|
if (ct.title == title)
|
||||||
|
return ct;
|
||||||
|
return CMakeTarget();
|
||||||
|
}
|
||||||
|
|
||||||
CMakeFile::CMakeFile(CMakeProject *parent, QString fileName)
|
CMakeFile::CMakeFile(CMakeProject *parent, QString fileName)
|
||||||
: Core::IFile(parent), m_project(parent), m_fileName(fileName)
|
: Core::IFile(parent), m_project(parent), m_fileName(fileName)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -101,6 +101,7 @@ public:
|
|||||||
MakeStep *makeStep() const;
|
MakeStep *makeStep() const;
|
||||||
QStringList targets() const;
|
QStringList targets() const;
|
||||||
QString buildParser(const QString &buildConfiguration) const;
|
QString buildParser(const QString &buildConfiguration) const;
|
||||||
|
CMakeTarget targetForTitle(const QString &title);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void saveSettingsImpl(ProjectExplorer::PersistentSettingsWriter &writer);
|
virtual void saveSettingsImpl(ProjectExplorer::PersistentSettingsWriter &writer);
|
||||||
|
|||||||
@@ -168,8 +168,11 @@ QStringList CMakeRunConfigurationFactory::canCreate(ProjectExplorer::Project *pr
|
|||||||
CMakeProject *pro = qobject_cast<CMakeProject *>(project);
|
CMakeProject *pro = qobject_cast<CMakeProject *>(project);
|
||||||
if (!pro)
|
if (!pro)
|
||||||
return QStringList();
|
return QStringList();
|
||||||
// TODO gather all targets and return them here
|
QStringList allTargets = pro->targets();
|
||||||
return QStringList();
|
for (int i=0; i<allTargets.size(); ++i) {
|
||||||
|
allTargets[i] = Constants::CMAKERUNCONFIGURATION + allTargets[i];
|
||||||
|
}
|
||||||
|
return allTargets;
|
||||||
}
|
}
|
||||||
|
|
||||||
// used to translate the types to names to display to the user
|
// used to translate the types to names to display to the user
|
||||||
@@ -193,9 +196,9 @@ QSharedPointer<ProjectExplorer::RunConfiguration> CMakeRunConfigurationFactory::
|
|||||||
return rc;
|
return rc;
|
||||||
} else {
|
} else {
|
||||||
// Adding new
|
// Adding new
|
||||||
// TODO extract target from type
|
const QString title = type.mid(QString(Constants::CMAKERUNCONFIGURATION).length());
|
||||||
QString file = type.mid(QString(Constants::CMAKERUNCONFIGURATION).length());
|
const CMakeTarget &ct = pro->targetForTitle(title);
|
||||||
QSharedPointer<ProjectExplorer::RunConfiguration> rc(new CMakeRunConfiguration(pro, file, QString::null, QString::null));
|
QSharedPointer<ProjectExplorer::RunConfiguration> rc(new CMakeRunConfiguration(pro, ct.executable, ct.workingDirectory, ct.title));
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user