Ninja: Limit custom command side-effects to build folder
Revert commit 7243c951
(Ninja: Don't limit custom cmd side-effects to
build folder, 2014-06-27) because it causes every custom command
dependency in the source tree to get a phony rule. For large projects
these rules get too big for Ninja to handle efficiently. While the
original change addressed a valid concern, it did not seem to occur
regularly in practice because well-behaved projects generate their
side-effects only in the build tree. Until we support explicit
specification of side-effects (CMake issue #14963), we will have to use
this as a middle-ground.
This commit is contained in:
parent
734580a8db
commit
de8e534b41
|
@ -1042,17 +1042,27 @@ void cmGlobalNinjaGenerator::WriteUnknownExplicitDependencies(std::ostream& os)
|
|||
std::back_inserter(unkownExplicitDepends));
|
||||
|
||||
|
||||
std::string const rootBuildDirectory =
|
||||
this->GetCMakeInstance()->GetHomeOutputDirectory();
|
||||
for (std::vector<std::string>::const_iterator
|
||||
i = unkownExplicitDepends.begin();
|
||||
i != unkownExplicitDepends.end();
|
||||
++i)
|
||||
{
|
||||
cmNinjaDeps deps(1,*i);
|
||||
this->WritePhonyBuild(os,
|
||||
"",
|
||||
deps,
|
||||
deps);
|
||||
}
|
||||
//verify the file is in the build directory
|
||||
std::string const absDepPath = cmSystemTools::CollapseFullPath(
|
||||
i->c_str(), rootBuildDirectory.c_str());
|
||||
bool const inBuildDir = cmSystemTools::IsSubDirectory(absDepPath.c_str(),
|
||||
rootBuildDirectory.c_str());
|
||||
if(inBuildDir)
|
||||
{
|
||||
cmNinjaDeps deps(1,*i);
|
||||
this->WritePhonyBuild(os,
|
||||
"",
|
||||
deps,
|
||||
deps);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void cmGlobalNinjaGenerator::WriteBuiltinTargets(std::ostream& os)
|
||||
|
|
Loading…
Reference in New Issue