ENH: Made cmLocalVisualStudioGenerator a superclass of cmLocalVisualStudio6Generator. Implemented object file unique naming when multiple sources share the same name.

This commit is contained in:
Brad King 2006-07-11 13:23:02 -04:00
parent 9bf5af6e32
commit 87ef95c715
2 changed files with 29 additions and 4 deletions

View File

@ -359,6 +359,9 @@ void cmLocalVisualStudio6Generator::WriteDSPFile(std::ostream& fout,
}
}
}
// Compute which sources need unique object computation.
this->ComputeObjectNameRequirements(sourceGroups);
// Write the DSP file's header.
this->WriteDSPHeader(fout, libName, target, sourceGroups);
@ -404,6 +407,13 @@ void cmLocalVisualStudio6Generator
(*sf)->GetCustomCommand();
std::string compileFlags;
std::vector<std::string> depends;
std::string objectNameDir;
if(this->NeedObjectName.find(*sf) != this->NeedObjectName.end())
{
objectNameDir =
cmSystemTools::GetFilenamePath(
this->GetObjectFileNameWithoutTarget(*(*sf)));
}
// Add per-source file flags.
if(const char* cflags = (*sf)->GetProperty("COMPILE_FLAGS"))
@ -464,7 +474,7 @@ void cmLocalVisualStudio6Generator
comment.c_str(), command->GetDepends(),
command->GetOutputs(), flags);
}
else if(compileFlags.size())
else if(!compileFlags.empty() || !objectNameDir.empty())
{
for(std::vector<std::string>::iterator i
= this->Configurations.begin();
@ -478,7 +488,22 @@ void cmLocalVisualStudio6Generator
{
fout << "!ELSEIF \"$(CFG)\" == " << i->c_str() << std::endl;
}
fout << "\n# ADD CPP " << compileFlags << "\n\n";
if(!compileFlags.empty())
{
fout << "\n# ADD CPP " << compileFlags << "\n\n";
}
if(!objectNameDir.empty())
{
// Strip the subdirectory name out of the configuration name.
std::string config = *i;
std::string::size_type pos = config.find_last_of(" ");
config = config.substr(pos+1, std::string::npos);
config = config.substr(0, config.size()-1);
// Setup an alternate object file directory.
fout << "\n# PROP Intermediate_Dir \""
<< config << "/" << objectNameDir << "\"\n\n";
}
}
fout << "!ENDIF\n\n";
}

View File

@ -17,7 +17,7 @@
#ifndef cmLocalVisualStudio6Generator_h
#define cmLocalVisualStudio6Generator_h
#include "cmLocalGenerator.h"
#include "cmLocalVisualStudioGenerator.h"
class cmMakeDepend;
class cmTarget;
@ -31,7 +31,7 @@ class cmCustomCommand;
* cmLocalVisualStudio6Generator produces a LocalUnix makefile from its
* member this->Makefile.
*/
class cmLocalVisualStudio6Generator : public cmLocalGenerator
class cmLocalVisualStudio6Generator : public cmLocalVisualStudioGenerator
{
public:
///! Set cache only and recurse to false by default.