Factor out custom command .rule file path generation
Add cmGlobalGenerator::GenerateRuleFile to compute a generator-specific rule file location. This will allow specific generators to override the location of .rule files without changing the behavior of other generators.
This commit is contained in:
parent
f9b758e91a
commit
369e3464be
|
@ -2091,6 +2091,21 @@ cmTarget cmGlobalGenerator::CreateGlobalTarget(
|
|||
return target;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
std::string
|
||||
cmGlobalGenerator::GenerateRuleFile(std::string const& output) const
|
||||
{
|
||||
std::string ruleFile = output;
|
||||
ruleFile += ".rule";
|
||||
const char* dir = this->GetCMakeCFGIntDir();
|
||||
if(dir && dir[0] == '$')
|
||||
{
|
||||
cmSystemTools::ReplaceString(ruleFile, dir,
|
||||
cmake::GetCMakeFilesDirectory());
|
||||
}
|
||||
return ruleFile;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
void cmGlobalGenerator::AppendDirectoryForConfig(const char*, const char*,
|
||||
const char*, std::string&)
|
||||
|
|
|
@ -277,6 +277,9 @@ public:
|
|||
i.e. "Can I build Debug and Release in the same tree?" */
|
||||
virtual bool IsMultiConfig() { return false; }
|
||||
|
||||
/** Generate an <output>.rule file path for a given command output. */
|
||||
virtual std::string GenerateRuleFile(std::string const& output) const;
|
||||
|
||||
protected:
|
||||
typedef std::vector<cmLocalGenerator*> GeneratorVector;
|
||||
// for a project collect all its targets by following depend
|
||||
|
|
|
@ -948,17 +948,11 @@ cmMakefile::AddCustomCommandToOutput(const std::vector<std::string>& outputs,
|
|||
// Generate a rule file if the main dependency is not available.
|
||||
if(!file)
|
||||
{
|
||||
cmGlobalGenerator* gg = this->LocalGenerator->GetGlobalGenerator();
|
||||
|
||||
// Construct a rule file associated with the first output produced.
|
||||
std::string outName = outputs[0];
|
||||
outName += ".rule";
|
||||
const char* dir =
|
||||
this->LocalGenerator->GetGlobalGenerator()->
|
||||
GetCMakeCFGIntDir();
|
||||
if(dir && dir[0] == '$')
|
||||
{
|
||||
cmSystemTools::ReplaceString(outName, dir,
|
||||
cmake::GetCMakeFilesDirectory());
|
||||
}
|
||||
std::string outName = gg->GenerateRuleFile(outputs[0]);
|
||||
|
||||
// Check if the rule file already exists.
|
||||
file = this->GetSource(outName.c_str());
|
||||
if(file && file->GetCustomCommand() && !replace)
|
||||
|
|
Loading…
Reference in New Issue