summaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
Diffstat (limited to 'Source')
-rw-r--r--Source/cmLocalGenerator.cxx10
-rw-r--r--Source/cmLocalVisualStudio6Generator.cxx41
-rw-r--r--Source/cmLocalVisualStudio7Generator.cxx48
3 files changed, 71 insertions, 28 deletions
diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx
index 6952338..e802066 100644
--- a/Source/cmLocalGenerator.cxx
+++ b/Source/cmLocalGenerator.cxx
@@ -1349,9 +1349,15 @@ void cmLocalGenerator::OutputLinkLibraries(std::ostream& fout,
}
fout << " ";
}
- if(this->Makefile->GetDefinition("CMAKE_STANDARD_LIBRARIES"))
+
+ // Add standard libraries for this language.
+ std::string standardLibsVar = "CMAKE_";
+ standardLibsVar += linkLanguage;
+ standardLibsVar += "_STANDARD_LIBRARIES";
+ if(const char* stdLibs =
+ this->Makefile->GetDefinition(standardLibsVar.c_str()))
{
- fout << this->Makefile->GetDefinition("CMAKE_STANDARD_LIBRARIES") << " ";
+ fout << stdLibs << " ";
}
}
diff --git a/Source/cmLocalVisualStudio6Generator.cxx b/Source/cmLocalVisualStudio6Generator.cxx
index b6fd4f8..6fa2a9a 100644
--- a/Source/cmLocalVisualStudio6Generator.cxx
+++ b/Source/cmLocalVisualStudio6Generator.cxx
@@ -1059,17 +1059,38 @@ void cmLocalVisualStudio6Generator
libMultiLineOptionsForDebug += extraLinkOptions;
libMultiLineOptionsForDebug += " \n";
}
- if(const char* stdLibs = this->Makefile->GetDefinition("CMAKE_STANDARD_LIBRARIES"))
+ if(target.GetType() >= cmTarget::EXECUTABLE &&
+ target.GetType() <= cmTarget::MODULE_LIBRARY)
{
- libOptions += " ";
- libOptions += stdLibs;
- libOptions += " ";
- libMultiLineOptions += "# ADD LINK32 ";
- libMultiLineOptions += stdLibs;
- libMultiLineOptions += " \n";
- libMultiLineOptionsForDebug += "# ADD LINK32 ";
- libMultiLineOptionsForDebug += stdLibs;
- libMultiLineOptionsForDebug += " \n";
+ // Get the language to use for linking.
+ const char* linkLanguage = target.GetLinkerLanguage(this->GetGlobalGenerator());
+ if(!linkLanguage)
+ {
+ cmSystemTools::Error("CMake can not determine linker language for target:",
+ target.GetName());
+ return;
+ }
+
+ // Compute the variable name to lookup standard libraries for this
+ // language.
+ std::string standardLibsVar = "CMAKE_";
+ standardLibsVar += linkLanguage;
+ standardLibsVar += "_STANDARD_LIBRARIES";
+
+ // Add standard libraries.
+ if(const char* stdLibs =
+ this->Makefile->GetDefinition(standardLibsVar.c_str()))
+ {
+ libOptions += " ";
+ libOptions += stdLibs;
+ libOptions += " ";
+ libMultiLineOptions += "# ADD LINK32 ";
+ libMultiLineOptions += stdLibs;
+ libMultiLineOptions += " \n";
+ libMultiLineOptionsForDebug += "# ADD LINK32 ";
+ libMultiLineOptionsForDebug += stdLibs;
+ libMultiLineOptionsForDebug += " \n";
+ }
}
if(const char* targetLinkFlags = target.GetProperty("LINK_FLAGS"))
{
diff --git a/Source/cmLocalVisualStudio7Generator.cxx b/Source/cmLocalVisualStudio7Generator.cxx
index c619660..dd47fa2 100644
--- a/Source/cmLocalVisualStudio7Generator.cxx
+++ b/Source/cmLocalVisualStudio7Generator.cxx
@@ -667,6 +667,21 @@ void cmLocalVisualStudio7Generator::OutputBuildTool(std::ostream& fout,
std::vector<cmStdString> linkDirs;
this->ComputeLinkInformation(target, configName, linkLibs, linkDirs);
+ // Get the language to use for linking.
+ const char* linkLanguage = target.GetLinkerLanguage(this->GetGlobalGenerator());
+ if(!linkLanguage)
+ {
+ cmSystemTools::Error("CMake can not determine linker language for target:",
+ target.GetName());
+ return;
+ }
+
+ // Compute the variable name to lookup standard libraries for this
+ // language.
+ std::string standardLibsVar = "CMAKE_";
+ standardLibsVar += linkLanguage;
+ standardLibsVar += "_STANDARD_LIBRARIES";
+
fout << "\t\t\t<Tool\n"
<< "\t\t\t\tName=\"VCLinkerTool\"\n"
<< "\t\t\t\tAdditionalOptions=\"/MACHINE:I386";
@@ -679,7 +694,7 @@ void cmLocalVisualStudio7Generator::OutputBuildTool(std::ostream& fout,
// libraries which may be set by the user to something bad.
fout << "\"\n"
<< "\t\t\t\tAdditionalDependencies=\"$(NOINHERIT) "
- << this->Makefile->GetRequiredDefinition("CMAKE_STANDARD_LIBRARIES")
+ << this->Makefile->GetSafeDefinition(standardLibsVar.c_str())
<< " ";
this->OutputLibraries(fout, linkLibs);
fout << "\"\n";
@@ -709,13 +724,6 @@ void cmLocalVisualStudio7Generator::OutputBuildTool(std::ostream& fout,
{
fout << "\t\t\t\tGenerateDebugInformation=\"TRUE\"\n";
}
- const char* linkLanguage = target.GetLinkerLanguage(this->GetGlobalGenerator());
- if(!linkLanguage)
- {
- cmSystemTools::Error("CMake can not determine linker language for target:",
- target.GetName());
- return;
- }
std::string stackVar = "CMAKE_";
stackVar += linkLanguage;
stackVar += "_STACK_SIZE";
@@ -739,6 +747,21 @@ void cmLocalVisualStudio7Generator::OutputBuildTool(std::ostream& fout,
std::vector<cmStdString> linkDirs;
this->ComputeLinkInformation(target, configName, linkLibs, linkDirs);
+ // Get the language to use for linking.
+ const char* linkLanguage = target.GetLinkerLanguage(this->GetGlobalGenerator());
+ if(!linkLanguage)
+ {
+ cmSystemTools::Error("CMake can not determine linker language for target:",
+ target.GetName());
+ return;
+ }
+
+ // Compute the variable name to lookup standard libraries for this
+ // language.
+ std::string standardLibsVar = "CMAKE_";
+ standardLibsVar += linkLanguage;
+ standardLibsVar += "_STANDARD_LIBRARIES";
+
fout << "\t\t\t<Tool\n"
<< "\t\t\t\tName=\"VCLinkerTool\"\n"
<< "\t\t\t\tAdditionalOptions=\"/MACHINE:I386";
@@ -751,7 +774,7 @@ void cmLocalVisualStudio7Generator::OutputBuildTool(std::ostream& fout,
// libraries which may be set by the user to something bad.
fout << "\"\n"
<< "\t\t\t\tAdditionalDependencies=\"$(NOINHERIT) "
- << this->Makefile->GetRequiredDefinition("CMAKE_STANDARD_LIBRARIES")
+ << this->Makefile->GetSafeDefinition(standardLibsVar.c_str())
<< " ";
this->OutputLibraries(fout, linkLibs);
fout << "\"\n";
@@ -783,13 +806,6 @@ void cmLocalVisualStudio7Generator::OutputBuildTool(std::ostream& fout,
{
fout << "\t\t\t\tSubSystem=\"1\"\n";
}
- const char* linkLanguage = target.GetLinkerLanguage(this->GetGlobalGenerator());
- if(!linkLanguage)
- {
- cmSystemTools::Error("CMake can not determine linker language for target:",
- target.GetName());
- return;
- }
std::string stackVar = "CMAKE_";
stackVar += linkLanguage;
stackVar += "_STACK_SIZE";