diff --git a/Source/cmLocalVisualStudio6Generator.cxx b/Source/cmLocalVisualStudio6Generator.cxx index a12d0e7df..54bdafe53 100644 --- a/Source/cmLocalVisualStudio6Generator.cxx +++ b/Source/cmLocalVisualStudio6Generator.cxx @@ -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 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::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"; } diff --git a/Source/cmLocalVisualStudio6Generator.h b/Source/cmLocalVisualStudio6Generator.h index f2b4d1356..cdc246fbf 100644 --- a/Source/cmLocalVisualStudio6Generator.h +++ b/Source/cmLocalVisualStudio6Generator.h @@ -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.