|
@@ -338,7 +338,35 @@ bool cmTargetLinkLibrariesCommand::HandleLibrary(const std::string& lib,
|
|
|
// Handle normal case first.
|
|
|
if (this->CurrentProcessingState != ProcessingKeywordLinkInterface &&
|
|
|
this->CurrentProcessingState != ProcessingPlainLinkInterface) {
|
|
|
- this->Makefile->AddLinkLibraryForTarget(this->Target->GetName(), lib, llt);
|
|
|
+
|
|
|
+ cmTarget* t =
|
|
|
+ this->Makefile->FindLocalNonAliasTarget(this->Target->GetName());
|
|
|
+ if (!t) {
|
|
|
+ std::ostringstream e;
|
|
|
+ e << "Attempt to add link library \"" << lib << "\" to target \""
|
|
|
+ << this->Target->GetName()
|
|
|
+ << "\" which is not built in this directory.";
|
|
|
+ this->Makefile->IssueMessage(cmake::FATAL_ERROR, e.str());
|
|
|
+ } else {
|
|
|
+
|
|
|
+ cmTarget* tgt = this->Makefile->GetGlobalGenerator()->FindTarget(lib);
|
|
|
+
|
|
|
+ if (tgt && (tgt->GetType() != cmState::STATIC_LIBRARY) &&
|
|
|
+ (tgt->GetType() != cmState::SHARED_LIBRARY) &&
|
|
|
+ (tgt->GetType() != cmState::INTERFACE_LIBRARY) &&
|
|
|
+ !tgt->IsExecutableWithExports()) {
|
|
|
+ std::ostringstream e;
|
|
|
+ e << "Target \"" << lib << "\" of type "
|
|
|
+ << cmState::GetTargetTypeName(tgt->GetType())
|
|
|
+ << " may not be linked into another target. "
|
|
|
+ << "One may link only to STATIC or SHARED libraries, or "
|
|
|
+ << "to executables with the ENABLE_EXPORTS property set.";
|
|
|
+ this->Makefile->IssueMessage(cmake::FATAL_ERROR, e.str());
|
|
|
+ }
|
|
|
+
|
|
|
+ this->Target->AddLinkLibrary(*this->Makefile, lib, llt);
|
|
|
+ }
|
|
|
+
|
|
|
if (this->CurrentProcessingState == ProcessingLinkLibraries) {
|
|
|
this->Target->AppendProperty(
|
|
|
"INTERFACE_LINK_LIBRARIES",
|