diff options
author | Ken Martin <ken.martin@kitware.com> | 2005-05-19 19:00:35 (GMT) |
---|---|---|
committer | Ken Martin <ken.martin@kitware.com> | 2005-05-19 19:00:35 (GMT) |
commit | 463c8e07a818c539dd9dbb37034646a08c7622e3 (patch) | |
tree | 721fb1941ce03a7c3f7e46ec356580036db41318 | |
parent | 6adbe6d049a50ae128f460bbd3802052b25c67e3 (diff) | |
download | CMake-463c8e07a818c539dd9dbb37034646a08c7622e3.zip CMake-463c8e07a818c539dd9dbb37034646a08c7622e3.tar.gz CMake-463c8e07a818c539dd9dbb37034646a08c7622e3.tar.bz2 |
ENH: fixes for subdir build Makefiles
-rw-r--r-- | Source/cmGlobalUnixMakefileGenerator3.cxx | 59 | ||||
-rw-r--r-- | Source/cmLocalUnixMakefileGenerator3.cxx | 4 |
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); |