Create a static library's output dir for VS 6
VS 6 forgets to create the output directory for a static library if it differs from the intermediate files directory. We work around this VS bug by creating a pre-link event on the library target to make the directory.
This commit is contained in:
parent
90b8164e44
commit
b38c2929b0
@ -825,6 +825,34 @@ void cmLocalVisualStudio6Generator::SetBuildType(BuildType b,
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
cmsys::auto_ptr<cmCustomCommand>
|
||||
cmLocalVisualStudio6Generator::MaybeCreateOutputDir(cmTarget& target,
|
||||
const char* config)
|
||||
{
|
||||
cmsys::auto_ptr<cmCustomCommand> pcc;
|
||||
|
||||
// VS6 forgets to create the output directory for archives if it
|
||||
// differs from the intermediate directory.
|
||||
if(target.GetType() != cmTarget::STATIC_LIBRARY) { return pcc; }
|
||||
std::string outDir = target.GetDirectory(config, false);
|
||||
|
||||
// Add a pre-link event to create the directory.
|
||||
cmCustomCommandLine command;
|
||||
command.push_back(this->Makefile->GetRequiredDefinition("CMAKE_COMMAND"));
|
||||
command.push_back("-E");
|
||||
command.push_back("make_directory");
|
||||
command.push_back(outDir);
|
||||
std::vector<std::string> no_output;
|
||||
std::vector<std::string> no_depends;
|
||||
cmCustomCommandLines commands;
|
||||
commands.push_back(command);
|
||||
pcc.reset(new cmCustomCommand(no_output, no_depends, commands, 0, 0));
|
||||
pcc->SetEscapeOldStyle(false);
|
||||
pcc->SetEscapeAllowMakeVars(true);
|
||||
return pcc;
|
||||
}
|
||||
|
||||
// look for custom rules on a target and collect them together
|
||||
std::string
|
||||
cmLocalVisualStudio6Generator::CreateTargetRules(cmTarget &target,
|
||||
@ -845,6 +873,11 @@ cmLocalVisualStudio6Generator::CreateTargetRules(cmTarget &target,
|
||||
event.Write(target.GetPreLinkCommands());
|
||||
cmsys::auto_ptr<cmCustomCommand> pcc(
|
||||
this->MaybeCreateImplibDir(target, configName));
|
||||
if(pcc.get())
|
||||
{
|
||||
event.Write(*pcc);
|
||||
}
|
||||
pcc = this->MaybeCreateOutputDir(target, configName);
|
||||
if(pcc.get())
|
||||
{
|
||||
event.Write(*pcc);
|
||||
|
@ -81,6 +81,8 @@ private:
|
||||
std::ostream &fout, const char *libName);
|
||||
class EventWriter;
|
||||
friend class EventWriter;
|
||||
cmsys::auto_ptr<cmCustomCommand>
|
||||
MaybeCreateOutputDir(cmTarget& target, const char* config);
|
||||
std::string CreateTargetRules(cmTarget &target,
|
||||
const char* configName,
|
||||
const char *libName);
|
||||
|
Loading…
x
Reference in New Issue
Block a user