sync target generation with the CodeBlocks generator

Basically the code is now a copy of the one from the CodeBlocks generator,
maybe this could move into a common helper function somewhere:
-only insert GLOBAL targets from the toplevel directory
-don't insert the edit_cache target if it calls ccmake, since this doesn't
work in the output tab of Eclipse
-add the /fast targets

Alex
This commit is contained in:
Alexander Neundorf 2009-09-10 13:49:51 -04:00
parent 10f39d8c80
commit 6097c04c4d
2 changed files with 50 additions and 79 deletions

View File

@ -40,36 +40,6 @@ cmExtraEclipseCDT4Generator
// this->SupportedGlobalGenerators.push_back("MSYS Makefiles"); // this->SupportedGlobalGenerators.push_back("MSYS Makefiles");
#endif #endif
this->SupportedGlobalGenerators.push_back("Unix Makefiles"); this->SupportedGlobalGenerators.push_back("Unix Makefiles");
// don't create these targets in Eclipse, they are too many and
// should be only rarely used directly
this->TargetsToIgnore.insert("preinstall");
this->TargetsToIgnore.insert("install/local");
this->TargetsToIgnore.insert("ContinuousBuild");
this->TargetsToIgnore.insert("ContinuousConfigure");
this->TargetsToIgnore.insert("ContinuousCoverage");
this->TargetsToIgnore.insert("ContinuousMemCheck");
this->TargetsToIgnore.insert("ContinuousStart");
this->TargetsToIgnore.insert("ContinuousSubmit");
this->TargetsToIgnore.insert("ContinuousTest");
this->TargetsToIgnore.insert("ContinuousUpdate");
this->TargetsToIgnore.insert("ExperimentalBuild");
this->TargetsToIgnore.insert("ExperimentalConfigure");
this->TargetsToIgnore.insert("ExperimentalCoverage");
this->TargetsToIgnore.insert("ExperimentalMemCheck");
this->TargetsToIgnore.insert("ExperimentalStart");
this->TargetsToIgnore.insert("ExperimentalSubmit");
this->TargetsToIgnore.insert("ExperimentalTest");
this->TargetsToIgnore.insert("ExperimentalUpdate");
this->TargetsToIgnore.insert("NightlyBuild");
this->TargetsToIgnore.insert("NightlyConfigure");
this->TargetsToIgnore.insert("NightlyCoverage");
this->TargetsToIgnore.insert("NightlyMemCheck");
this->TargetsToIgnore.insert("NightlyMemoryCheck");
this->TargetsToIgnore.insert("NightlyStart");
this->TargetsToIgnore.insert("NightlySubmit");
this->TargetsToIgnore.insert("NightlyTest");
this->TargetsToIgnore.insert("NightlyUpdate");
} }
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
@ -669,59 +639,61 @@ void cmExtraEclipseCDT4Generator::CreateCProjectFile() const
++it) ++it)
{ {
const cmTargets& targets = (*it)->GetMakefile()->GetTargets(); const cmTargets& targets = (*it)->GetMakefile()->GetTargets();
for(cmTargets::const_iterator t = targets.begin(); t != targets.end(); ++t) cmMakefile* makefile=(*it)->GetMakefile();
for(cmTargets::const_iterator ti=targets.begin(); ti!=targets.end(); ++ti)
{ {
bool addFastTarget = false; switch(ti->second.GetType())
switch(t->second.GetType())
{ {
case cmTarget::EXECUTABLE:
case cmTarget::STATIC_LIBRARY:
case cmTarget::SHARED_LIBRARY:
case cmTarget::MODULE_LIBRARY:
addFastTarget = true;
// no break here
case cmTarget::UTILITY:
case cmTarget::GLOBAL_TARGET: case cmTarget::GLOBAL_TARGET:
{ {
bool insertTarget = true; bool insertTarget = false;
if(insertTarget && // Only add the global targets from CMAKE_BINARY_DIR,
(std::set<std::string>::const_iterator( // not from the subdirs
this->TargetsToIgnore.find(t->first)) != if (strcmp(makefile->GetStartOutputDirectory(),
this->TargetsToIgnore.end())) makefile->GetHomeOutputDirectory())==0)
{ {
insertTarget = false; insertTarget = true;
} // only add the "edit_cache" target if it's not ccmake, because
// this will not work within the IDE
if (ti->first == "edit_cache")
{
if (strstr(makefile->GetRequiredDefinition
("CMAKE_EDIT_COMMAND"), "ccmake")!=NULL)
{
insertTarget = false;
}
}
}
if (insertTarget)
{
this->AppendTarget(fout, ti->first, make);
}
}
break;
case cmTarget::UTILITY:
// Add all utility targets, except the Nightly/Continuous/
// Experimental-"sub"targets as e.g. NightlyStart
if (((ti->first.find("Nightly")==0) &&(ti->first!="Nightly"))
|| ((ti->first.find("Continuous")==0)&&(ti->first!="Continuous"))
|| ((ti->first.find("Experimental")==0)
&& (ti->first!="Experimental")))
{
break;
}
if(insertTarget && (emmited.find(t->first) != emmited.end())) this->AppendTarget(fout, ti->first, make);
{ break;
insertTarget = false; case cmTarget::EXECUTABLE:
} case cmTarget::STATIC_LIBRARY:
case cmTarget::SHARED_LIBRARY:
// add the edit_cache target only if it's not ccmake case cmTarget::MODULE_LIBRARY:
// otherwise ccmake will be executed in the log view of Eclipse, {
// which is no terminal, so curses don't work there, Alex this->AppendTarget(fout, ti->first, make);
if (insertTarget && (t->first=="edit_cache")) std::string fastTarget = ti->first;
{ fastTarget += "/fast";
if (strstr(mf->GetRequiredDefinition("CMAKE_EDIT_COMMAND"), this->AppendTarget(fout, fastTarget, make);
"ccmake")!=NULL) }
{ break;
insertTarget = false;
}
}
if (insertTarget)
{
emmited.insert(t->first);
this->AppendTarget(fout, t->first, make);
if (addFastTarget || t->first=="install")
{
std::string fastTarget = t->first;
fastTarget = fastTarget + "/fast";
this->AppendTarget(fout, fastTarget, make);
}
}
break;
}
// ignore these: // ignore these:
case cmTarget::INSTALL_FILES: case cmTarget::INSTALL_FILES:
case cmTarget::INSTALL_PROGRAMS: case cmTarget::INSTALL_PROGRAMS:

View File

@ -119,7 +119,6 @@ private:
std::vector<std::string> OutLinkedResources; std::vector<std::string> OutLinkedResources;
std::string HomeDirectory; std::string HomeDirectory;
std::string HomeOutputDirectory; std::string HomeOutputDirectory;
std::set<std::string> TargetsToIgnore;
bool IsOutOfSourceBuild; bool IsOutOfSourceBuild;
bool GenerateSourceProject; bool GenerateSourceProject;