Initialize LINK_INTERFACE_LIBRARIES target property with a variable

Define variable CMAKE_LINK_INTERFACE_LIBRARIES to initialize the
value of this property when a target is created.  This allows authors
to write

  set(CMAKE_LINK_INTERFACE_LIBRARIES "")

to disable transitive linking to implementation dependencies of shared
libraries on platforms where it is possible.
This commit is contained in:
Stephen Kelly 2011-10-01 12:23:56 +02:00 committed by Brad King
parent ef8cc9997c
commit d9cbba7c2c
2 changed files with 12 additions and 1 deletions

View File

@ -1219,7 +1219,14 @@ void cmDocumentVariables::DefineVariables(cmake* cm)
"Therefore a specific build configuration must be chosen even " "Therefore a specific build configuration must be chosen even "
"if the generated build system supports multiple configurations.",false, "if the generated build system supports multiple configurations.",false,
"Variables that Control the Build"); "Variables that Control the Build");
cm->DefineProperty
("CMAKE_LINK_INTERFACE_LIBRARIES", cmProperty::VARIABLE,
"Default value for LINK_INTERFACE_LIBRARIES of targets.",
"This variable is used to initialize the "
"LINK_INTERFACE_LIBRARIES property on all the targets. "
"See that target property for additional information.",
false,
"Variables that Control the Build");
// Variables defined when the a language is enabled These variables will // Variables defined when the a language is enabled These variables will
// also be defined whenever CMake has loaded its support for compiling (LANG) // also be defined whenever CMake has loaded its support for compiling (LANG)

View File

@ -619,6 +619,9 @@ void cmTarget::DefineProperties(cmake *cm)
"If the list is empty then no transitive link dependencies will be " "If the list is empty then no transitive link dependencies will be "
"incorporated when this target is linked into another target even if " "incorporated when this target is linked into another target even if "
"the default set is non-empty. " "the default set is non-empty. "
"This property is initialized by the value of the variable "
"CMAKE_LINK_INTERFACE_LIBRARIES if it is set when a target is "
"created. "
"This property is ignored for STATIC libraries."); "This property is ignored for STATIC libraries.");
cm->DefineProperty cm->DefineProperty
@ -1153,6 +1156,7 @@ void cmTarget::SetMakefile(cmMakefile* mf)
this->SetPropertyDefault("Fortran_MODULE_DIRECTORY", 0); this->SetPropertyDefault("Fortran_MODULE_DIRECTORY", 0);
this->SetPropertyDefault("OSX_ARCHITECTURES", 0); this->SetPropertyDefault("OSX_ARCHITECTURES", 0);
this->SetPropertyDefault("AUTOMOC", 0); this->SetPropertyDefault("AUTOMOC", 0);
this->SetPropertyDefault("LINK_INTERFACE_LIBRARIES", 0);
// Collect the set of configuration types. // Collect the set of configuration types.
std::vector<std::string> configNames; std::vector<std::string> configNames;