mirror of
https://github.com/Kitware/CMake.git
synced 2026-02-09 00:29:55 -06:00
Merge branch 'export-target-lang-name' into release-3.16
Merge-request: !3927
This commit is contained in:
@@ -752,9 +752,9 @@ void cmExportFileGenerator::SetImportLinkInterface(
|
||||
|
||||
if (iface->ImplementationIsInterface) {
|
||||
// Policy CMP0022 must not be NEW.
|
||||
this->SetImportLinkProperty(suffix, target,
|
||||
"IMPORTED_LINK_INTERFACE_LIBRARIES",
|
||||
iface->Libraries, properties, missingTargets);
|
||||
this->SetImportLinkProperty(
|
||||
suffix, target, "IMPORTED_LINK_INTERFACE_LIBRARIES", iface->Libraries,
|
||||
properties, missingTargets, ImportLinkPropertyTargetNames::Yes);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -832,14 +832,14 @@ void cmExportFileGenerator::SetImportDetailProperties(
|
||||
// Add the transitive link dependencies for this configuration.
|
||||
if (cmLinkInterface const* iface =
|
||||
target->GetLinkInterface(config, target)) {
|
||||
this->SetImportLinkProperty(suffix, target,
|
||||
"IMPORTED_LINK_INTERFACE_LANGUAGES",
|
||||
iface->Languages, properties, missingTargets);
|
||||
this->SetImportLinkProperty(
|
||||
suffix, target, "IMPORTED_LINK_INTERFACE_LANGUAGES", iface->Languages,
|
||||
properties, missingTargets, ImportLinkPropertyTargetNames::No);
|
||||
|
||||
std::vector<std::string> dummy;
|
||||
this->SetImportLinkProperty(suffix, target,
|
||||
"IMPORTED_LINK_DEPENDENT_LIBRARIES",
|
||||
iface->SharedDeps, properties, dummy);
|
||||
this->SetImportLinkProperty(
|
||||
suffix, target, "IMPORTED_LINK_DEPENDENT_LIBRARIES", iface->SharedDeps,
|
||||
properties, dummy, ImportLinkPropertyTargetNames::Yes);
|
||||
if (iface->Multiplicity > 0) {
|
||||
std::string prop =
|
||||
cmStrCat("IMPORTED_LINK_INTERFACE_MULTIPLICITY", suffix);
|
||||
@@ -880,7 +880,8 @@ template <typename T>
|
||||
void cmExportFileGenerator::SetImportLinkProperty(
|
||||
std::string const& suffix, cmGeneratorTarget* target,
|
||||
const std::string& propName, std::vector<T> const& entries,
|
||||
ImportPropertyMap& properties, std::vector<std::string>& missingTargets)
|
||||
ImportPropertyMap& properties, std::vector<std::string>& missingTargets,
|
||||
ImportLinkPropertyTargetNames targetNames)
|
||||
{
|
||||
// Skip the property if there are no entries.
|
||||
if (entries.empty()) {
|
||||
@@ -895,9 +896,13 @@ void cmExportFileGenerator::SetImportLinkProperty(
|
||||
link_entries += sep;
|
||||
sep = ";";
|
||||
|
||||
std::string temp = asString(l);
|
||||
this->AddTargetNamespace(temp, target, missingTargets);
|
||||
link_entries += temp;
|
||||
if (targetNames == ImportLinkPropertyTargetNames::Yes) {
|
||||
std::string temp = asString(l);
|
||||
this->AddTargetNamespace(temp, target, missingTargets);
|
||||
link_entries += temp;
|
||||
} else {
|
||||
link_entries += asString(l);
|
||||
}
|
||||
}
|
||||
|
||||
// Store the property.
|
||||
|
||||
@@ -102,13 +102,19 @@ protected:
|
||||
ImportPropertyMap& properties,
|
||||
std::vector<std::string>& missingTargets);
|
||||
|
||||
enum class ImportLinkPropertyTargetNames
|
||||
{
|
||||
Yes,
|
||||
No,
|
||||
};
|
||||
template <typename T>
|
||||
void SetImportLinkProperty(std::string const& suffix,
|
||||
cmGeneratorTarget* target,
|
||||
const std::string& propName,
|
||||
std::vector<T> const& entries,
|
||||
ImportPropertyMap& properties,
|
||||
std::vector<std::string>& missingTargets);
|
||||
std::vector<std::string>& missingTargets,
|
||||
ImportLinkPropertyTargetNames targetNames);
|
||||
|
||||
/** Each subclass knows how to generate its kind of export file. */
|
||||
virtual bool GenerateMainFile(std::ostream& os) = 0;
|
||||
|
||||
@@ -645,3 +645,8 @@ if(CMAKE_GENERATOR MATCHES "Make|Ninja")
|
||||
EXPORT RequiredExp DESTINATION lib)
|
||||
export(TARGETS testLinkDepends NAMESPACE bld_ APPEND FILE ExportBuildTree.cmake)
|
||||
endif()
|
||||
|
||||
# Test the presence of targets named the same as languages.
|
||||
# IMPORTED_LINK_INTERFACE_LANGUAGES entries should not be targets.
|
||||
add_library(C INTERFACE)
|
||||
add_library(CXX INTERFACE)
|
||||
|
||||
Reference in New Issue
Block a user