summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephen Kelly <steveire@gmail.com>2013-11-20 12:44:04 +0100
committerStephen Kelly <steveire@gmail.com>2013-11-25 16:17:50 +0100
commit0bfcb450e6cab8d9c2c079e10bf0acea62ffadbe (patch)
treeeb8e1b76aae32f91fc6f5f47e81bd709b87215ed
parent9f095b74162b972d07c695ad23964056f310ade2 (diff)
downloadcmake-0bfcb450e6cab8d9c2c079e10bf0acea62ffadbe.tar.gz
INTERFACE_LIBRARY: Avoid codepaths which set unneeded properties.
As an INTERFACE_LIBRARY has no direct link dependencies, we can short-circuit in cmGeneratorExpressionEvaluator and in cmGlobalGenerator::CheckLocalGenerators. As they do not generate any output directly, any generate- or install- related code acn also be short-circuited. Many of the local generators already do this. Because only INTERFACE related properties make sense on INTERFACE_LIBRARY targets, avoid setting other properties, for example via defaults.
-rw-r--r--Source/cmComputeTargetDepends.cxx10
-rw-r--r--Source/cmExportFileGenerator.cxx30
-rw-r--r--Source/cmGeneratorExpressionEvaluator.cxx3
-rw-r--r--Source/cmGlobalGenerator.cxx9
-rw-r--r--Source/cmGlobalVisualStudio7Generator.cxx8
-rw-r--r--Source/cmGlobalVisualStudio8Generator.cxx3
-rw-r--r--Source/cmInstallCommand.cxx3
-rw-r--r--Source/cmLocalGenerator.cxx9
-rw-r--r--Source/cmLocalNinjaGenerator.cxx3
-rw-r--r--Source/cmLocalUnixMakefileGenerator3.cxx3
-rw-r--r--Source/cmMakefile.cxx8
-rw-r--r--Source/cmMakefileLibraryTargetGenerator.cxx9
-rw-r--r--Source/cmTarget.cxx133
-rw-r--r--Source/cmVisualStudio10TargetGenerator.cxx3
14 files changed, 153 insertions, 81 deletions
diff --git a/Source/cmComputeTargetDepends.cxx b/Source/cmComputeTargetDepends.cxx
index 7fd475489f..cb9e37e0cb 100644
--- a/Source/cmComputeTargetDepends.cxx
+++ b/Source/cmComputeTargetDepends.cxx
@@ -237,7 +237,15 @@ void cmComputeTargetDepends::CollectTargetDepends(int depender_index)
it != configs.end(); ++it)
{
std::vector<std::string> tlibs;
- depender->GetDirectLinkLibraries(it->c_str(), tlibs, depender);
+ if (depender->GetType() == cmTarget::INTERFACE_LIBRARY)
+ {
+ // For INTERFACE_LIBRARY depend on the interface instead.
+ depender->GetInterfaceLinkLibraries(it->c_str(), tlibs, depender);
+ }
+ else
+ {
+ depender->GetDirectLinkLibraries(it->c_str(), tlibs, depender);
+ }
// A target should not depend on itself.
emitted.insert(depender->GetName());
for(std::vector<std::string>::const_iterator lib = tlibs.begin();
diff --git a/Source/cmExportFileGenerator.cxx b/Source/cmExportFileGenerator.cxx
index 2ce445838f..dc62284dc2 100644
--- a/Source/cmExportFileGenerator.cxx
+++ b/Source/cmExportFileGenerator.cxx
@@ -388,14 +388,11 @@ void getCompatibleInterfaceProperties(cmTarget *target,
if (!info)
{
- if (target->GetType() != cmTarget::INTERFACE_LIBRARY)
- {
- cmMakefile* mf = target->GetMakefile();
- cmOStringStream e;
- e << "Exporting the target \"" << target->GetName() << "\" is not "
- "allowed since its linker language cannot be determined";
- mf->IssueMessage(cmake::FATAL_ERROR, e.str());
- }
+ cmMakefile* mf = target->GetMakefile();
+ cmOStringStream e;
+ e << "Exporting the target \"" << target->GetName() << "\" is not "
+ "allowed since its linker language cannot be determined";
+ mf->IssueMessage(cmake::FATAL_ERROR, e.str());
return;
}
@@ -447,15 +444,18 @@ void cmExportFileGenerator::PopulateCompatibleInterfaceProperties(
getPropertyContents(target, "COMPATIBLE_INTERFACE_NUMBER_MAX",
ifaceProperties);
- getCompatibleInterfaceProperties(target, ifaceProperties, 0);
+ if (target->GetType() != cmTarget::INTERFACE_LIBRARY)
+ {
+ getCompatibleInterfaceProperties(target, ifaceProperties, 0);
- std::vector<std::string> configNames;
- target->GetMakefile()->GetConfigurations(configNames);
+ std::vector<std::string> configNames;
+ target->GetMakefile()->GetConfigurations(configNames);
- for (std::vector<std::string>::const_iterator ci = configNames.begin();
- ci != configNames.end(); ++ci)
- {
- getCompatibleInterfaceProperties(target, ifaceProperties, ci->c_str());
+ for (std::vector<std::string>::const_iterator ci = configNames.begin();
+ ci != configNames.end(); ++ci)
+ {
+ getCompatibleInterfaceProperties(target, ifaceProperties, ci->c_str());
+ }
}
for (std::set<std::string>::const_iterator it = ifaceProperties.begin();
diff --git a/Source/cmGeneratorExpressionEvaluator.cxx b/Source/cmGeneratorExpressionEvaluator.cxx
index 67972b976d..17bf041ff9 100644
--- a/Source/cmGeneratorExpressionEvaluator.cxx
+++ b/Source/cmGeneratorExpressionEvaluator.cxx
@@ -954,7 +954,8 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode
if (!prop)
{
- if (target->IsImported())
+ if (target->IsImported()
+ || target->GetType() == cmTarget::INTERFACE_LIBRARY)
{
return linkedTargetsContent;
}
diff --git a/Source/cmGlobalGenerator.cxx b/Source/cmGlobalGenerator.cxx
index 20cd15e8d8..e6f3d94358 100644
--- a/Source/cmGlobalGenerator.cxx
+++ b/Source/cmGlobalGenerator.cxx
@@ -1309,6 +1309,11 @@ void cmGlobalGenerator::FinalizeTargetCompileInfo()
{
cmTarget* t = &ti->second;
+ if (t->GetType() == cmTarget::INTERFACE_LIBRARY)
+ {
+ continue;
+ }
+
t->AppendBuildInterfaceIncludes();
for (std::vector<cmValueWithOrigin>::const_iterator it
@@ -1461,6 +1466,10 @@ void cmGlobalGenerator::CheckLocalGenerators()
for (cmTargets::iterator l = targets.begin();
l != targets.end(); l++)
{
+ if (l->second.GetType() == cmTarget::INTERFACE_LIBRARY)
+ {
+ continue;
+ }
const cmTarget::LinkLibraryVectorType& libs =
l->second.GetOriginalLinkLibraries();
for(cmTarget::LinkLibraryVectorType::const_iterator lib = libs.begin();
diff --git a/Source/cmGlobalVisualStudio7Generator.cxx b/Source/cmGlobalVisualStudio7Generator.cxx
index 3d939f353a..f523a8ff72 100644
--- a/Source/cmGlobalVisualStudio7Generator.cxx
+++ b/Source/cmGlobalVisualStudio7Generator.cxx
@@ -327,6 +327,10 @@ void cmGlobalVisualStudio7Generator::WriteTargetConfigurations(
projectTargets.begin(); tt != projectTargets.end(); ++tt)
{
cmTarget* target = *tt;
+ if(target->GetType() == cmTarget::INTERFACE_LIBRARY)
+ {
+ continue;
+ }
const char* expath = target->GetProperty("EXTERNAL_MSPROJECT");
if(expath)
{
@@ -364,6 +368,10 @@ void cmGlobalVisualStudio7Generator::WriteTargetsToSolution(
projectTargets.begin(); tt != projectTargets.end(); ++tt)
{
cmTarget* target = *tt;
+ if(target->GetType() == cmTarget::INTERFACE_LIBRARY)
+ {
+ continue;
+ }
bool written = false;
// handle external vc project files
diff --git a/Source/cmGlobalVisualStudio8Generator.cxx b/Source/cmGlobalVisualStudio8Generator.cxx
index 69b0a7af72..e4ce13fb02 100644
--- a/Source/cmGlobalVisualStudio8Generator.cxx
+++ b/Source/cmGlobalVisualStudio8Generator.cxx
@@ -442,7 +442,8 @@ bool cmGlobalVisualStudio8Generator::NeedLinkLibraryDependencies(
{
if(cmTarget* depTarget = this->FindTarget(0, ui->c_str()))
{
- if(depTarget->GetProperty("EXTERNAL_MSPROJECT"))
+ if(depTarget->GetType() != cmTarget::INTERFACE_LIBRARY
+ && depTarget->GetProperty("EXTERNAL_MSPROJECT"))
{
// This utility dependency names an external .vcproj target.
// We use LinkLibraryDependencies="true" to link to it without
diff --git a/Source/cmInstallCommand.cxx b/Source/cmInstallCommand.cxx
index d309a2ab18..10578f2076 100644
--- a/Source/cmInstallCommand.cxx
+++ b/Source/cmInstallCommand.cxx
@@ -645,7 +645,8 @@ bool cmInstallCommand::HandleTargetsMode(std::vector<std::string> const& args)
// generators for them.
bool createInstallGeneratorsForTargetFileSets = true;
- if(target.IsFrameworkOnApple())
+ if(target.IsFrameworkOnApple()
+ || target.GetType() == cmTarget::INTERFACE_LIBRARY)
{
createInstallGeneratorsForTargetFileSets = false;
}
diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx
index cf5798f258..d26d6e9845 100644
--- a/Source/cmLocalGenerator.cxx
+++ b/Source/cmLocalGenerator.cxx
@@ -541,6 +541,10 @@ void cmLocalGenerator::GenerateTargetManifest()
t != targets.end(); ++t)
{
cmGeneratorTarget& target = *t->second;
+ if (target.Target->GetType() == cmTarget::INTERFACE_LIBRARY)
+ {
+ continue;
+ }
if(configNames.empty())
{
target.GenerateTargetManifest(0);
@@ -2829,6 +2833,11 @@ cmLocalGenerator
cmTargets& tgts = this->Makefile->GetTargets();
for(cmTargets::iterator l = tgts.begin(); l != tgts.end(); ++l)
{
+ if (l->second.GetType() == cmTarget::INTERFACE_LIBRARY)
+ {
+ continue;
+ }
+
// Include the user-specified pre-install script for this target.
if(const char* preinstall = l->second.GetProperty("PRE_INSTALL_SCRIPT"))
{
diff --git a/Source/cmLocalNinjaGenerator.cxx b/Source/cmLocalNinjaGenerator.cxx
index 158d714c41..168bc42d1c 100644
--- a/Source/cmLocalNinjaGenerator.cxx
+++ b/Source/cmLocalNinjaGenerator.cxx
@@ -68,7 +68,8 @@ void cmLocalNinjaGenerator::Generate()
for(cmGeneratorTargetsType::iterator t = targets.begin();
t != targets.end(); ++t)
{
- if (t->second->Target->IsImported())
+ if (t->second->Target->GetType() == cmTarget::INTERFACE_LIBRARY
+ || t->second->Target->IsImported())
{
continue;
}
diff --git a/Source/cmLocalUnixMakefileGenerator3.cxx b/Source/cmLocalUnixMakefileGenerator3.cxx
index 9af5c29b49..5ada88db48 100644
--- a/Source/cmLocalUnixMakefileGenerator3.cxx
+++ b/Source/cmLocalUnixMakefileGenerator3.cxx
@@ -151,7 +151,8 @@ void cmLocalUnixMakefileGenerator3::Generate()
for(cmGeneratorTargetsType::iterator t = targets.begin();
t != targets.end(); ++t)
{
- if (t->second->Target->IsImported())
+ if (t->second->Target->GetType() == cmTarget::INTERFACE_LIBRARY
+ || t->second->Target->IsImported())
{
continue;
}
diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx
index 989aa5f83f..30a155783e 100644
--- a/Source/cmMakefile.cxx
+++ b/Source/cmMakefile.cxx
@@ -868,6 +868,10 @@ void cmMakefile::ConfigureFinalPass()
for (cmTargets::iterator l = this->Targets.begin();
l != this->Targets.end(); l++)
{
+ if (l->second.GetType() == cmTarget::INTERFACE_LIBRARY)
+ {
+ continue;
+ }
l->second.FinishConfigure();
}
}
@@ -2256,6 +2260,10 @@ void cmMakefile::ExpandVariablesCMP0019()
l != this->Targets.end(); ++l)
{
cmTarget &t = l->second;
+ if (t.GetType() == cmTarget::INTERFACE_LIBRARY)
+ {
+ continue;
+ }
includeDirs = t.GetProperty("INCLUDE_DIRECTORIES");
if(mightExpandVariablesCMP0019(includeDirs))
{
diff --git a/Source/cmMakefileLibraryTargetGenerator.cxx b/Source/cmMakefileLibraryTargetGenerator.cxx
index 7b8a53150c..35818ee13b 100644
--- a/Source/cmMakefileLibraryTargetGenerator.cxx
+++ b/Source/cmMakefileLibraryTargetGenerator.cxx
@@ -25,9 +25,12 @@ cmMakefileLibraryTargetGenerator
cmMakefileTargetGenerator(target->Target)
{
this->CustomCommandDriver = OnDepends;
- this->Target->GetLibraryNames(
- this->TargetNameOut, this->TargetNameSO, this->TargetNameReal,
- this->TargetNameImport, this->TargetNamePDB, this->ConfigName);
+ if (this->Target->GetType() != cmTarget::INTERFACE_LIBRARY)
+ {
+ this->Target->GetLibraryNames(
+ this->TargetNameOut, this->TargetNameSO, this->TargetNameReal,
+ this->TargetNameImport, this->TargetNamePDB, this->ConfigName);
+ }
this->OSXBundleGenerator = new cmOSXBundleGenerator(target,
this->ConfigName);
diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index 120a666d80..022048c79a 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -255,32 +255,34 @@ void cmTarget::SetMakefile(cmMakefile* mf)
this->IsApple = this->Makefile->IsOn("APPLE");
// Setup default property values.
- this->SetPropertyDefault("INSTALL_NAME_DIR", 0);
- this->SetPropertyDefault("INSTALL_RPATH", "");
- this->SetPropertyDefault("INSTALL_RPATH_USE_LINK_PATH", "OFF");
- this->SetPropertyDefault("SKIP_BUILD_RPATH", "OFF");
- this->SetPropertyDefault("BUILD_WITH_INSTALL_RPATH", "OFF");
- this->SetPropertyDefault("ARCHIVE_OUTPUT_DIRECTORY", 0);
- this->SetPropertyDefault("LIBRARY_OUTPUT_DIRECTORY", 0);
- this->SetPropertyDefault("RUNTIME_OUTPUT_DIRECTORY", 0);
- this->SetPropertyDefault("PDB_OUTPUT_DIRECTORY", 0);
- this->SetPropertyDefault("Fortran_FORMAT", 0);
- this->SetPropertyDefault("Fortran_MODULE_DIRECTORY", 0);
- this->SetPropertyDefault("GNUtoMS", 0);
- this->SetPropertyDefault("OSX_ARCHITECTURES", 0);
- this->SetPropertyDefault("AUTOMOC", 0);
- this->SetPropertyDefault("AUTOUIC", 0);
- this->SetPropertyDefault("AUTORCC", 0);
- this->SetPropertyDefault("AUTOMOC_MOC_OPTIONS", 0);
- this->SetPropertyDefault("AUTOUIC_OPTIONS", 0);
- this->SetPropertyDefault("AUTORCC_OPTIONS", 0);
- this->SetPropertyDefault("LINK_DEPENDS_NO_SHARED", 0);
- this->SetPropertyDefault("LINK_INTERFACE_LIBRARIES", 0);
- this->SetPropertyDefault("WIN32_EXECUTABLE", 0);
- this->SetPropertyDefault("MACOSX_BUNDLE", 0);
- this->SetPropertyDefault("MACOSX_RPATH", 0);
- this->SetPropertyDefault("NO_SYSTEM_FROM_IMPORTED", 0);
-
+ if (this->GetType() != INTERFACE_LIBRARY)
+ {
+ this->SetPropertyDefault("INSTALL_NAME_DIR", 0);
+ this->SetPropertyDefault("INSTALL_RPATH", "");
+ this->SetPropertyDefault("INSTALL_RPATH_USE_LINK_PATH", "OFF");
+ this->SetPropertyDefault("SKIP_BUILD_RPATH", "OFF");
+ this->SetPropertyDefault("BUILD_WITH_INSTALL_RPATH", "OFF");
+ this->SetPropertyDefault("ARCHIVE_OUTPUT_DIRECTORY", 0);
+ this->SetPropertyDefault("LIBRARY_OUTPUT_DIRECTORY", 0);
+ this->SetPropertyDefault("RUNTIME_OUTPUT_DIRECTORY", 0);
+ this->SetPropertyDefault("PDB_OUTPUT_DIRECTORY", 0);
+ this->SetPropertyDefault("Fortran_FORMAT", 0);
+ this->SetPropertyDefault("Fortran_MODULE_DIRECTORY", 0);
+ this->SetPropertyDefault("GNUtoMS", 0);
+ this->SetPropertyDefault("OSX_ARCHITECTURES", 0);
+ this->SetPropertyDefault("AUTOMOC", 0);
+ this->SetPropertyDefault("AUTOUIC", 0);
+ this->SetPropertyDefault("AUTORCC", 0);
+ this->SetPropertyDefault("AUTOMOC_MOC_OPTIONS", 0);
+ this->SetPropertyDefault("AUTOUIC_OPTIONS", 0);
+ this->SetPropertyDefault("AUTORCC_OPTIONS", 0);
+ this->SetPropertyDefault("LINK_DEPENDS_NO_SHARED", 0);
+ this->SetPropertyDefault("LINK_INTERFACE_LIBRARIES", 0);
+ this->SetPropertyDefault("WIN32_EXECUTABLE", 0);
+ this->SetPropertyDefault("MACOSX_BUNDLE", 0);
+ this->SetPropertyDefault("MACOSX_RPATH", 0);
+ this->SetPropertyDefault("NO_SYSTEM_FROM_IMPORTED", 0);
+ }
// Collect the set of configuration types.
std::vector<std::string> configNames;
@@ -300,6 +302,11 @@ void cmTarget::SetMakefile(cmMakefile* mf)
std::string configUpper = cmSystemTools::UpperCase(*ci);
for(const char** p = configProps; *p; ++p)
{
+ if (this->TargetTypeValue == INTERFACE_LIBRARY
+ && strcmp(*p, "MAP_IMPORTED_CONFIG_") != 0)
+ {
+ continue;
+ }
std::string property = *p;
property += configUpper;
this->SetPropertyDefault(property.c_str(), 0);
@@ -311,7 +318,8 @@ void cmTarget::SetMakefile(cmMakefile* mf)
// did not support this variable. Projects may still specify the
// property directly. TODO: Make this depend on backwards
// compatibility setting.
- if(this->TargetTypeValue != cmTarget::EXECUTABLE)
+ if(this->TargetTypeValue != cmTarget::EXECUTABLE
+ && this->TargetTypeValue != cmTarget::INTERFACE_LIBRARY)
{
std::string property = cmSystemTools::UpperCase(*ci);
property += "_POSTFIX";
@@ -352,16 +360,22 @@ void cmTarget::SetMakefile(cmMakefile* mf)
this->InsertCompileOption(*it);
}
- this->SetPropertyDefault("C_VISIBILITY_PRESET", 0);
- this->SetPropertyDefault("CXX_VISIBILITY_PRESET", 0);
- this->SetPropertyDefault("VISIBILITY_INLINES_HIDDEN", 0);
+ if (this->GetType() != INTERFACE_LIBRARY)
+ {
+ this->SetPropertyDefault("C_VISIBILITY_PRESET", 0);
+ this->SetPropertyDefault("CXX_VISIBILITY_PRESET", 0);
+ this->SetPropertyDefault("VISIBILITY_INLINES_HIDDEN", 0);
+ }
if(this->TargetTypeValue == cmTarget::SHARED_LIBRARY
|| this->TargetTypeValue == cmTarget::MODULE_LIBRARY)
{
this->SetProperty("POSITION_INDEPENDENT_CODE", "True");
}
- this->SetPropertyDefault("POSITION_INDEPENDENT_CODE", 0);
+ if (this->GetType() != INTERFACE_LIBRARY)
+ {
+ this->SetPropertyDefault("POSITION_INDEPENDENT_CODE", 0);
+ }
// Record current policies for later use.
#define CAPTURE_TARGET_POLICY(POLICY) \
@@ -4433,7 +4447,8 @@ bool isLinkDependentProperty(cmTarget const* tgt, const std::string &p,
bool cmTarget::IsLinkInterfaceDependentBoolProperty(const std::string &p,
const char *config) const
{
- if (this->TargetTypeValue == OBJECT_LIBRARY)
+ if (this->TargetTypeValue == OBJECT_LIBRARY
+ || this->TargetTypeValue == INTERFACE_LIBRARY)
{
return false;
}
@@ -4446,7 +4461,8 @@ bool cmTarget::IsLinkInterfaceDependentBoolProperty(const std::string &p,
bool cmTarget::IsLinkInterfaceDependentStringProperty(const std::string &p,
const char *config) const
{
- if (this->TargetTypeValue == OBJECT_LIBRARY)
+ if (this->TargetTypeValue == OBJECT_LIBRARY
+ || this->TargetTypeValue == INTERFACE_LIBRARY)
{
return false;
}
@@ -4458,7 +4474,8 @@ bool cmTarget::IsLinkInterfaceDependentStringProperty(const std::string &p,
bool cmTarget::IsLinkInterfaceDependentNumberMinProperty(const std::string &p,
const char *config) const
{
- if (this->TargetTypeValue == OBJECT_LIBRARY)
+ if (this->TargetTypeValue == OBJECT_LIBRARY
+ || this->TargetTypeValue == INTERFACE_LIBRARY)
{
return false;
}
@@ -4470,7 +4487,8 @@ bool cmTarget::IsLinkInterfaceDependentNumberMinProperty(const std::string &p,
bool cmTarget::IsLinkInterfaceDependentNumberMaxProperty(const std::string &p,
const char *config) const
{
- if (this->TargetTypeValue == OBJECT_LIBRARY)
+ if (this->TargetTypeValue == OBJECT_LIBRARY
+ || this->TargetTypeValue == INTERFACE_LIBRARY)
{
return false;
}
@@ -5105,34 +5123,37 @@ bool cmTarget::ComputeLinkInterface(const char* config, LinkInterface& iface,
{
emitted.insert(*li);
}
- LinkImplementation const* impl = this->GetLinkImplementation(config,
- headTarget);
- for(std::vector<std::string>::const_iterator
- li = impl->Libraries.begin(); li != impl->Libraries.end(); ++li)
+ if (this->GetType() != cmTarget::INTERFACE_LIBRARY)
{
- if(emitted.insert(*li).second)
+ LinkImplementation const* impl = this->GetLinkImplementation(config,
+ headTarget);
+ for(std::vector<std::string>::const_iterator
+ li = impl->Libraries.begin(); li != impl->Libraries.end(); ++li)
{
- if(cmTarget* tgt = this->Makefile->FindTargetToUse(li->c_str()))
+ if(emitted.insert(*li).second)
{
- // This is a runtime dependency on another shared library.
- if(tgt->GetType() == cmTarget::SHARED_LIBRARY)
+ if(cmTarget* tgt = this->Makefile->FindTargetToUse(li->c_str()))
{
- iface.SharedDeps.push_back(*li);
+ // This is a runtime dependency on another shared library.
+ if(tgt->GetType() == cmTarget::SHARED_LIBRARY)
+ {
+ iface.SharedDeps.push_back(*li);
+ }
+ }
+ else
+ {
+ // TODO: Recognize shared library file names. Perhaps this
+ // should be moved to cmComputeLinkInformation, but that creates
+ // a chicken-and-egg problem since this list is needed for its
+ // construction.
}
- }
- else
- {
- // TODO: Recognize shared library file names. Perhaps this
- // should be moved to cmComputeLinkInformation, but that creates
- // a chicken-and-egg problem since this list is needed for its
- // construction.
}
}
- }
- if(this->LinkLanguagePropagatesToDependents())
- {
- // Targets using this archive need its language runtime libraries.
- iface.Languages = impl->Languages;
+ if(this->LinkLanguagePropagatesToDependents())
+ {
+ // Targets using this archive need its language runtime libraries.
+ iface.Languages = impl->Languages;
+ }
}
}
}
diff --git a/Source/cmVisualStudio10TargetGenerator.cxx b/Source/cmVisualStudio10TargetGenerator.cxx
index 635d8cb291..10663b73ad 100644
--- a/Source/cmVisualStudio10TargetGenerator.cxx
+++ b/Source/cmVisualStudio10TargetGenerator.cxx
@@ -184,7 +184,8 @@ void cmVisualStudio10TargetGenerator::WriteString(const char* line,
void cmVisualStudio10TargetGenerator::Generate()
{
// do not generate external ms projects
- if(this->Target->GetProperty("EXTERNAL_MSPROJECT"))
+ if(this->Target->GetType() == cmTarget::INTERFACE_LIBRARY
+ || this->Target->GetProperty("EXTERNAL_MSPROJECT"))
{
return;
}