|
|
@@ -39,6 +39,7 @@ public:
|
|
|
LocalGenerator(e) {}
|
|
|
typedef cmComputeLinkInformation::ItemVector ItemVector;
|
|
|
void OutputLibraries(std::ostream& fout, ItemVector const& libs);
|
|
|
+ void OutputObjects(std::ostream& fout, cmTarget* t, const char* isep = 0);
|
|
|
private:
|
|
|
cmLocalVisualStudio7Generator* LocalGenerator;
|
|
|
};
|
|
|
@@ -1033,6 +1034,15 @@ void cmLocalVisualStudio7Generator::OutputBuildTool(std::ostream& fout,
|
|
|
fout << "\t\t\t<Tool\n"
|
|
|
<< "\t\t\t\tName=\"" << tool << "\"\n";
|
|
|
|
|
|
+ if(this->GetVersion() < VS8)
|
|
|
+ {
|
|
|
+ cmOStringStream libdeps;
|
|
|
+ this->Internal->OutputObjects(libdeps, &target);
|
|
|
+ if(!libdeps.str().empty())
|
|
|
+ {
|
|
|
+ fout << "\t\t\t\tAdditionalDependencies=\"" << libdeps.str() << "\"\n";
|
|
|
+ }
|
|
|
+ }
|
|
|
std::string libflags;
|
|
|
if(const char* flags = target.GetProperty("STATIC_LIBRARY_FLAGS"))
|
|
|
{
|
|
|
@@ -1093,8 +1103,12 @@ void cmLocalVisualStudio7Generator::OutputBuildTool(std::ostream& fout,
|
|
|
// Use the NOINHERIT macro to avoid getting VS project default
|
|
|
// libraries which may be set by the user to something bad.
|
|
|
fout << "\t\t\t\tAdditionalDependencies=\"$(NOINHERIT) "
|
|
|
- << this->Makefile->GetSafeDefinition(standardLibsVar.c_str())
|
|
|
- << " ";
|
|
|
+ << this->Makefile->GetSafeDefinition(standardLibsVar.c_str());
|
|
|
+ if(this->GetVersion() < VS8)
|
|
|
+ {
|
|
|
+ this->Internal->OutputObjects(fout, &target, " ");
|
|
|
+ }
|
|
|
+ fout << " ";
|
|
|
this->Internal->OutputLibraries(fout, cli.GetItems());
|
|
|
fout << "\"\n";
|
|
|
temp = target.GetDirectory(configName);
|
|
|
@@ -1174,8 +1188,12 @@ void cmLocalVisualStudio7Generator::OutputBuildTool(std::ostream& fout,
|
|
|
// Use the NOINHERIT macro to avoid getting VS project default
|
|
|
// libraries which may be set by the user to something bad.
|
|
|
fout << "\t\t\t\tAdditionalDependencies=\"$(NOINHERIT) "
|
|
|
- << this->Makefile->GetSafeDefinition(standardLibsVar.c_str())
|
|
|
- << " ";
|
|
|
+ << this->Makefile->GetSafeDefinition(standardLibsVar.c_str());
|
|
|
+ if(this->GetVersion() < VS8)
|
|
|
+ {
|
|
|
+ this->Internal->OutputObjects(fout, &target, " ");
|
|
|
+ }
|
|
|
+ fout << " ";
|
|
|
this->Internal->OutputLibraries(fout, cli.GetItems());
|
|
|
fout << "\"\n";
|
|
|
temp = target.GetDirectory(configName);
|
|
|
@@ -1261,6 +1279,30 @@ cmLocalVisualStudio7GeneratorInternals
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+//----------------------------------------------------------------------------
|
|
|
+void
|
|
|
+cmLocalVisualStudio7GeneratorInternals
|
|
|
+::OutputObjects(std::ostream& fout, cmTarget* t, const char* isep)
|
|
|
+{
|
|
|
+ // VS < 8 does not support per-config source locations so we
|
|
|
+ // list object library content on the link line instead.
|
|
|
+ cmLocalVisualStudio7Generator* lg = this->LocalGenerator;
|
|
|
+ cmGeneratorTarget* gt =
|
|
|
+ lg->GetGlobalGenerator()->GetGeneratorTarget(t);
|
|
|
+ std::vector<std::string> objs;
|
|
|
+ gt->UseObjectLibraries(objs);
|
|
|
+ const char* sep = isep? isep : "";
|
|
|
+ for(std::vector<std::string>::const_iterator
|
|
|
+ oi = objs.begin(); oi != objs.end(); ++oi)
|
|
|
+ {
|
|
|
+ std::string rel = lg->Convert(oi->c_str(),
|
|
|
+ cmLocalGenerator::START_OUTPUT,
|
|
|
+ cmLocalGenerator::UNCHANGED);
|
|
|
+ fout << sep << lg->ConvertToXMLOutputPath(rel.c_str());
|
|
|
+ sep = " ";
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
//----------------------------------------------------------------------------
|
|
|
void
|
|
|
cmLocalVisualStudio7Generator
|
|
|
@@ -1344,7 +1386,27 @@ void cmLocalVisualStudio7Generator::WriteVCProjFile(std::ostream& fout,
|
|
|
this->WriteGroup(&sg, target, fout, libName, configs);
|
|
|
}
|
|
|
|
|
|
- //}
|
|
|
+ if(this->GetVersion() >= VS8)
|
|
|
+ {
|
|
|
+ // VS >= 8 support per-config source locations so we
|
|
|
+ // list object library content as external objects.
|
|
|
+ cmGeneratorTarget* gt =
|
|
|
+ this->GlobalGenerator->GetGeneratorTarget(&target);
|
|
|
+ std::vector<std::string> objs;
|
|
|
+ gt->UseObjectLibraries(objs);
|
|
|
+ if(!objs.empty())
|
|
|
+ {
|
|
|
+ // TODO: Separate sub-filter for each object library used?
|
|
|
+ fout << "\t\t<Filter Name=\"Object Libraries\">\n";
|
|
|
+ for(std::vector<std::string>::const_iterator
|
|
|
+ oi = objs.begin(); oi != objs.end(); ++oi)
|
|
|
+ {
|
|
|
+ std::string o = this->ConvertToXMLOutputPathSingle(oi->c_str());
|
|
|
+ fout << "\t\t\t<File RelativePath=\"" << o << "\" />\n";
|
|
|
+ }
|
|
|
+ fout << "\t\t</Filter>\n";
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
fout << "\t</Files>\n";
|
|
|
|