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
|
// look for custom rules on a target and collect them together
|
||||||
std::string
|
std::string
|
||||||
cmLocalVisualStudio6Generator::CreateTargetRules(cmTarget &target,
|
cmLocalVisualStudio6Generator::CreateTargetRules(cmTarget &target,
|
||||||
|
@ -845,6 +873,11 @@ cmLocalVisualStudio6Generator::CreateTargetRules(cmTarget &target,
|
||||||
event.Write(target.GetPreLinkCommands());
|
event.Write(target.GetPreLinkCommands());
|
||||||
cmsys::auto_ptr<cmCustomCommand> pcc(
|
cmsys::auto_ptr<cmCustomCommand> pcc(
|
||||||
this->MaybeCreateImplibDir(target, configName));
|
this->MaybeCreateImplibDir(target, configName));
|
||||||
|
if(pcc.get())
|
||||||
|
{
|
||||||
|
event.Write(*pcc);
|
||||||
|
}
|
||||||
|
pcc = this->MaybeCreateOutputDir(target, configName);
|
||||||
if(pcc.get())
|
if(pcc.get())
|
||||||
{
|
{
|
||||||
event.Write(*pcc);
|
event.Write(*pcc);
|
||||||
|
|
|
@ -81,6 +81,8 @@ private:
|
||||||
std::ostream &fout, const char *libName);
|
std::ostream &fout, const char *libName);
|
||||||
class EventWriter;
|
class EventWriter;
|
||||||
friend class EventWriter;
|
friend class EventWriter;
|
||||||
|
cmsys::auto_ptr<cmCustomCommand>
|
||||||
|
MaybeCreateOutputDir(cmTarget& target, const char* config);
|
||||||
std::string CreateTargetRules(cmTarget &target,
|
std::string CreateTargetRules(cmTarget &target,
|
||||||
const char* configName,
|
const char* configName,
|
||||||
const char *libName);
|
const char *libName);
|
||||||
|
|
Loading…
Reference in New Issue