summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKen Martin <ken.martin@kitware.com>2005-05-19 19:00:35 (GMT)
committerKen Martin <ken.martin@kitware.com>2005-05-19 19:00:35 (GMT)
commit463c8e07a818c539dd9dbb37034646a08c7622e3 (patch)
tree721fb1941ce03a7c3f7e46ec356580036db41318
parent6adbe6d049a50ae128f460bbd3802052b25c67e3 (diff)
downloadCMake-463c8e07a818c539dd9dbb37034646a08c7622e3.zip
CMake-463c8e07a818c539dd9dbb37034646a08c7622e3.tar.gz
CMake-463c8e07a818c539dd9dbb37034646a08c7622e3.tar.bz2
ENH: fixes for subdir build Makefiles
-rw-r--r--Source/cmGlobalUnixMakefileGenerator3.cxx59
-rw-r--r--Source/cmLocalUnixMakefileGenerator3.cxx4
2 files changed, 50 insertions, 13 deletions
diff --git a/Source/cmGlobalUnixMakefileGenerator3.cxx b/Source/cmGlobalUnixMakefileGenerator3.cxx
index a11d2cf..1722028 100644
--- a/Source/cmGlobalUnixMakefileGenerator3.cxx
+++ b/Source/cmGlobalUnixMakefileGenerator3.cxx
@@ -470,30 +470,67 @@ cmGlobalUnixMakefileGenerator3
std::vector<std::string> commands;
std::string localName;
std::string makeTargetName;
-
+
depends.push_back("cmake_check_build_system");
if (lg->GetParent())
{
std::string dir = lg->GetMakefile()->GetStartOutputDirectory();
dir = lg->Convert(dir.c_str(),cmLocalGenerator::HOME_OUTPUT,cmLocalGenerator::MAKEFILE);
localName = dir;
- localName += "/directory";
+ localName += "/directorystart";
+ makeTargetName = dir;
+ makeTargetName += "/directory";
+
+ std::vector<std::string> all_tgts;
+
+ // for all of out targets
+ for (cmTargets::const_iterator l = lg->GetMakefile()->GetTargets().begin();
+ l != lg->GetMakefile()->GetTargets().end(); l++)
+ {
+ if((l->second.GetType() == cmTarget::EXECUTABLE) ||
+ (l->second.GetType() == cmTarget::STATIC_LIBRARY) ||
+ (l->second.GetType() == cmTarget::SHARED_LIBRARY) ||
+ (l->second.GetType() == cmTarget::MODULE_LIBRARY) ||
+ (l->second.GetType() == cmTarget::UTILITY))
+ {
+ // Add this to the list of depends rules in this directory.
+ if(l->second.IsInAll())
+ {
+ std::string tname = lg->GetRelativeTargetDirectory(l->second);
+ tname += "/all";
+ all_tgts.push_back(tname);
+ }
+ }
+ }
+
+ // write the directory rule add in the subdirs
+ std::vector<cmLocalGenerator *> subdirs = lg->GetChildren();
+
+ // for each subdir add the directory depend
+ std::vector<cmLocalGenerator *>::iterator sdi = subdirs.begin();
+ for (; sdi != subdirs.end(); ++sdi)
+ {
+ cmLocalUnixMakefileGenerator3 * lg =
+ static_cast<cmLocalUnixMakefileGenerator3 *>(*sdi);
+ dir = lg->GetMakefile()->GetStartOutputDirectory();
+ dir += "/directory";
+ dir = lg->Convert(dir.c_str(),cmLocalGenerator::HOME_OUTPUT,
+ cmLocalGenerator::MAKEFILE);
+ all_tgts.push_back(dir);
+ }
// write the directory rule
commands.clear();
- makeTargetName = dir;
- makeTargetName += "/depend";
- commands.push_back(lg->GetRecursiveMakeCall("build.make",makeTargetName.c_str()));
- makeTargetName = dir;
- makeTargetName += "/requires";
- commands.push_back(lg->GetRecursiveMakeCall("build.make",makeTargetName.c_str()));
- makeTargetName = dir;
- makeTargetName += "/build";
- commands.push_back(lg->GetRecursiveMakeCall("build.make",makeTargetName.c_str()));
+ commands.push_back(lg->GetRecursiveMakeCall("Makefile",makeTargetName.c_str()));
// Write the rule.
lg->WriteMakeRule(ruleFileStream, "Convenience name for directory.",
localName.c_str(), depends, commands);
+
+ // Write the rule.
+ commands.clear();
+ lg->WriteMakeRule(ruleFileStream, "Convenience name for directory.",
+ makeTargetName.c_str(), all_tgts, commands);
}
// for each target Generate the rule files for each target.
diff --git a/Source/cmLocalUnixMakefileGenerator3.cxx b/Source/cmLocalUnixMakefileGenerator3.cxx
index 7f32628..a0d9ca7 100644
--- a/Source/cmLocalUnixMakefileGenerator3.cxx
+++ b/Source/cmLocalUnixMakefileGenerator3.cxx
@@ -2916,7 +2916,7 @@ cmLocalUnixMakefileGenerator3
//----------------------------------------------------------------------------
void cmLocalUnixMakefileGenerator3::WriteLocalMakefile()
{
- // only write the locla Makefile if we are not at the top
+ // only write the local Makefile if we are not at the top
if (!m_Parent)
{
return;
@@ -2943,7 +2943,7 @@ void cmLocalUnixMakefileGenerator3::WriteLocalMakefile()
// Write the empty all rule.
std::string dir = m_Makefile->GetStartOutputDirectory();
- dir += "/directory";
+ dir += "/directorystart";
dir = this->Convert(dir.c_str(),HOME_OUTPUT,MAKEFILE);
this->CreateJumpCommand(commands,dir);
this->WriteMakeRule(ruleFileStream, "The main all target", "all", depends, commands);