|
|
@@ -1675,6 +1675,7 @@ void cmLocalGenerator::GetTargetFlags(
|
|
|
this->AppendLinkerTypeFlags(extraLinkFlags, target, config, linkLanguage);
|
|
|
this->AppendPositionIndependentLinkerFlags(extraLinkFlags, target, config,
|
|
|
linkLanguage);
|
|
|
+ this->AppendWarningAsErrorLinkerFlags(extraLinkFlags, target, linkLanguage);
|
|
|
this->AppendIPOLinkerFlags(extraLinkFlags, target, config, linkLanguage);
|
|
|
this->AppendDependencyInfoLinkerFlags(extraLinkFlags, target, config,
|
|
|
linkLanguage);
|
|
|
@@ -3609,6 +3610,34 @@ void cmLocalGenerator::AppendPositionIndependentLinkerFlags(
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+void cmLocalGenerator::AppendWarningAsErrorLinkerFlags(
|
|
|
+ std::string& flags, cmGeneratorTarget* target, const std::string& lang)
|
|
|
+{
|
|
|
+ if (this->GetCMakeInstance()->GetIgnoreLinkWarningAsError()) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ switch (target->GetType()) {
|
|
|
+ case cmStateEnums::EXECUTABLE:
|
|
|
+ case cmStateEnums::SHARED_LIBRARY:
|
|
|
+ case cmStateEnums::MODULE_LIBRARY:
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ const auto wError = target->GetProperty("LINK_WARNING_AS_ERROR");
|
|
|
+ const auto wErrorOpts = this->Makefile->GetDefinition(
|
|
|
+ cmStrCat("CMAKE_", lang, "_LINK_OPTIONS_WARNING_AS_ERROR"));
|
|
|
+ if (wError.IsOn() && wErrorOpts.IsSet()) {
|
|
|
+ auto items = cmExpandListWithBacktrace(wErrorOpts, target->GetBacktrace());
|
|
|
+ target->ResolveLinkerWrapper(items, lang);
|
|
|
+ for (const auto& item : items) {
|
|
|
+ this->AppendFlagEscape(flags, item.Value);
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
void cmLocalGenerator::AppendDependencyInfoLinkerFlags(
|
|
|
std::string& flags, cmGeneratorTarget* target, const std::string& config,
|
|
|
const std::string& linkLanguage)
|