mirror of
https://github.com/Kitware/CMake.git
synced 2026-05-04 13:19:51 -05:00
target_link_libraries: Add LINK_(PUBLIC|PRIVATE) options
Makes it possible to specify the link dependencies and link interfaces in one command without repetition.
This commit is contained in:
@@ -95,8 +95,8 @@ bool cmTargetLinkLibrariesCommand
|
||||
bool haveLLT = false;
|
||||
|
||||
// Start with primary linking and switch to link interface
|
||||
// specification when the keyword is encountered.
|
||||
this->DoingInterface = false;
|
||||
// specification if the keyword is encountered as the first argument.
|
||||
this->CurrentProcessingState = ProcessingLinkLibraries;
|
||||
|
||||
// add libraries, nothe that there is an optional prefix
|
||||
// of debug and optimized than can be used
|
||||
@@ -104,7 +104,7 @@ bool cmTargetLinkLibrariesCommand
|
||||
{
|
||||
if(args[i] == "LINK_INTERFACE_LIBRARIES")
|
||||
{
|
||||
this->DoingInterface = true;
|
||||
this->CurrentProcessingState = ProcessingLinkInterface;
|
||||
if(i != 1)
|
||||
{
|
||||
this->Makefile->IssueMessage(
|
||||
@@ -115,6 +115,32 @@ bool cmTargetLinkLibrariesCommand
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else if(args[i] == "LINK_PUBLIC")
|
||||
{
|
||||
if(i != 1 && this->CurrentProcessingState != ProcessingPrivateInterface)
|
||||
{
|
||||
this->Makefile->IssueMessage(
|
||||
cmake::FATAL_ERROR,
|
||||
"The LINK_PUBLIC or LINK_PRIVATE option must appear as the second "
|
||||
"argument, just after the target name."
|
||||
);
|
||||
return true;
|
||||
}
|
||||
this->CurrentProcessingState = ProcessingPublicInterface;
|
||||
}
|
||||
else if(args[i] == "LINK_PRIVATE")
|
||||
{
|
||||
if(i != 1 && this->CurrentProcessingState != ProcessingPublicInterface)
|
||||
{
|
||||
this->Makefile->IssueMessage(
|
||||
cmake::FATAL_ERROR,
|
||||
"The LINK_PUBLIC or LINK_PRIVATE option must appear as the second "
|
||||
"argument, just after the target name."
|
||||
);
|
||||
return true;
|
||||
}
|
||||
this->CurrentProcessingState = ProcessingPrivateInterface;
|
||||
}
|
||||
else if(args[i] == "debug")
|
||||
{
|
||||
if(haveLLT)
|
||||
@@ -186,11 +212,13 @@ bool cmTargetLinkLibrariesCommand
|
||||
cmSystemTools::SetFatalErrorOccured();
|
||||
}
|
||||
|
||||
// If the INTERFACE option was given, make sure the
|
||||
// LINK_INTERFACE_LIBRARIES property exists. This allows the
|
||||
// command to be used to specify an empty link interface.
|
||||
if(this->DoingInterface &&
|
||||
!this->Target->GetProperty("LINK_INTERFACE_LIBRARIES"))
|
||||
// If any of the LINK_ options were given, make sure the
|
||||
// LINK_INTERFACE_LIBRARIES target property exists.
|
||||
// Use of any of the new keywords implies awareness of
|
||||
// this property. And if no libraries are named, it should
|
||||
// result in an empty link interface.
|
||||
if((this->CurrentProcessingState != ProcessingLinkLibraries)
|
||||
&& !this->Target->GetProperty("LINK_INTERFACE_LIBRARIES"))
|
||||
{
|
||||
this->Target->SetProperty("LINK_INTERFACE_LIBRARIES", "");
|
||||
}
|
||||
@@ -217,11 +245,15 @@ cmTargetLinkLibrariesCommand::HandleLibrary(const char* lib,
|
||||
cmTarget::LinkLibraryType llt)
|
||||
{
|
||||
// Handle normal case first.
|
||||
if(!this->DoingInterface)
|
||||
if(this->CurrentProcessingState != ProcessingLinkInterface)
|
||||
{
|
||||
this->Makefile
|
||||
->AddLinkLibraryForTarget(this->Target->GetName(), lib, llt);
|
||||
return;
|
||||
if (this->CurrentProcessingState != ProcessingPublicInterface
|
||||
|| this->CurrentProcessingState == ProcessingPrivateInterface)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Get the list of configurations considered to be DEBUG.
|
||||
|
||||
Reference in New Issue
Block a user