Consolidate duplicate link rule make dependency code
Factor code previously duplicated for library and executable rules into a common method.
This commit is contained in:
parent
947de96030
commit
07cfa57ec5
|
@ -82,34 +82,9 @@ void cmMakefileExecutableTargetGenerator::WriteExecutableRule(bool relink)
|
||||||
{
|
{
|
||||||
std::vector<std::string> commands;
|
std::vector<std::string> commands;
|
||||||
|
|
||||||
std::string relPath = this->LocalGenerator->GetHomeRelativeOutputPath();
|
|
||||||
std::string objTarget;
|
|
||||||
|
|
||||||
// Build list of dependencies.
|
// Build list of dependencies.
|
||||||
std::vector<std::string> depends;
|
std::vector<std::string> depends;
|
||||||
for(std::vector<std::string>::const_iterator obj = this->Objects.begin();
|
this->AppendLinkDepends(depends);
|
||||||
obj != this->Objects.end(); ++obj)
|
|
||||||
{
|
|
||||||
objTarget = relPath;
|
|
||||||
objTarget += *obj;
|
|
||||||
depends.push_back(objTarget);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add dependencies on targets that must be built first.
|
|
||||||
this->AppendTargetDepends(depends);
|
|
||||||
|
|
||||||
// Add a dependency on the rule file itself.
|
|
||||||
this->LocalGenerator->AppendRuleDepend(depends,
|
|
||||||
this->BuildFileNameFull.c_str());
|
|
||||||
|
|
||||||
for(std::vector<std::string>::const_iterator obj =
|
|
||||||
this->ExternalObjects.begin();
|
|
||||||
obj != this->ExternalObjects.end(); ++obj)
|
|
||||||
{
|
|
||||||
depends.push_back(*obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
// from here up is the same for exe or lib
|
|
||||||
|
|
||||||
// Get the name of the executable to generate.
|
// Get the name of the executable to generate.
|
||||||
std::string targetName;
|
std::string targetName;
|
||||||
|
|
|
@ -308,33 +308,10 @@ void cmMakefileLibraryTargetGenerator::WriteLibraryRules
|
||||||
// code duplication.
|
// code duplication.
|
||||||
std::vector<std::string> commands;
|
std::vector<std::string> commands;
|
||||||
|
|
||||||
std::string relPath = this->LocalGenerator->GetHomeRelativeOutputPath();
|
|
||||||
std::string objTarget;
|
|
||||||
|
|
||||||
// Build list of dependencies.
|
// Build list of dependencies.
|
||||||
std::vector<std::string> depends;
|
std::vector<std::string> depends;
|
||||||
for(std::vector<std::string>::const_iterator obj = this->Objects.begin();
|
this->AppendLinkDepends(depends);
|
||||||
obj != this->Objects.end(); ++obj)
|
|
||||||
{
|
|
||||||
objTarget = relPath;
|
|
||||||
objTarget += *obj;
|
|
||||||
depends.push_back(objTarget);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add dependencies on targets that must be built first.
|
|
||||||
this->AppendTargetDepends(depends);
|
|
||||||
|
|
||||||
// Add a dependency on the rule file itself.
|
|
||||||
this->LocalGenerator->AppendRuleDepend(depends,
|
|
||||||
this->BuildFileNameFull.c_str());
|
|
||||||
|
|
||||||
for(std::vector<std::string>::const_iterator obj
|
|
||||||
= this->ExternalObjects.begin();
|
|
||||||
obj != this->ExternalObjects.end(); ++obj)
|
|
||||||
{
|
|
||||||
depends.push_back(*obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get the language to use for linking this library.
|
// Get the language to use for linking this library.
|
||||||
const char* linkLanguage =
|
const char* linkLanguage =
|
||||||
this->Target->GetLinkerLanguage(this->ConfigName);
|
this->Target->GetLinkerLanguage(this->ConfigName);
|
||||||
|
|
|
@ -1505,6 +1505,37 @@ void cmMakefileTargetGenerator
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
void cmMakefileTargetGenerator
|
||||||
|
::AppendLinkDepends(std::vector<std::string>& depends)
|
||||||
|
{
|
||||||
|
// Add dependencies on the compiled object files.
|
||||||
|
std::string relPath = this->LocalGenerator->GetHomeRelativeOutputPath();
|
||||||
|
std::string objTarget;
|
||||||
|
for(std::vector<std::string>::const_iterator obj = this->Objects.begin();
|
||||||
|
obj != this->Objects.end(); ++obj)
|
||||||
|
{
|
||||||
|
objTarget = relPath;
|
||||||
|
objTarget += *obj;
|
||||||
|
depends.push_back(objTarget);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add dependencies on targets that must be built first.
|
||||||
|
this->AppendTargetDepends(depends);
|
||||||
|
|
||||||
|
// Add a dependency on the rule file itself.
|
||||||
|
this->LocalGenerator->AppendRuleDepend(depends,
|
||||||
|
this->BuildFileNameFull.c_str());
|
||||||
|
|
||||||
|
// Add dependencies on the external object files.
|
||||||
|
for(std::vector<std::string>::const_iterator obj
|
||||||
|
= this->ExternalObjects.begin();
|
||||||
|
obj != this->ExternalObjects.end(); ++obj)
|
||||||
|
{
|
||||||
|
depends.push_back(*obj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
void cmMakefileTargetGenerator
|
void cmMakefileTargetGenerator
|
||||||
::CloseFileStreams()
|
::CloseFileStreams()
|
||||||
|
|
|
@ -115,6 +115,9 @@ protected:
|
||||||
// append intertarget dependencies
|
// append intertarget dependencies
|
||||||
void AppendTargetDepends(std::vector<std::string>& depends);
|
void AppendTargetDepends(std::vector<std::string>& depends);
|
||||||
|
|
||||||
|
// Append link rule dependencies (objects, etc.).
|
||||||
|
void AppendLinkDepends(std::vector<std::string>& depends);
|
||||||
|
|
||||||
/** In order to support parallel builds for custom commands with
|
/** In order to support parallel builds for custom commands with
|
||||||
multiple outputs the outputs are given a serial order, and only
|
multiple outputs the outputs are given a serial order, and only
|
||||||
the first output actually has the build rule. Other outputs
|
the first output actually has the build rule. Other outputs
|
||||||
|
|
Loading…
Reference in New Issue