VS10: Skip targets with no linker language (#11230)
In targets with no non-header files the linker language cannot be determined. Since the target project file cannot be generated at all in this case, give up as soon as it is detected. Otherwise the generation code may try to run with uninitialized information.
This commit is contained in:
parent
4e137de7b1
commit
448661fbe5
|
@ -125,7 +125,10 @@ void cmVisualStudio10TargetGenerator::Generate()
|
||||||
".vcxproj");
|
".vcxproj");
|
||||||
if(this->Target->GetType() <= cmTarget::MODULE_LIBRARY)
|
if(this->Target->GetType() <= cmTarget::MODULE_LIBRARY)
|
||||||
{
|
{
|
||||||
this->ComputeClOptions();
|
if(!this->ComputeClOptions())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
cmMakefile* mf = this->Target->GetMakefile();
|
cmMakefile* mf = this->Target->GetMakefile();
|
||||||
std::string path = mf->GetStartOutputDirectory();
|
std::string path = mf->GetStartOutputDirectory();
|
||||||
|
@ -949,19 +952,23 @@ OutputLinkIncremental(std::string const& configName)
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
void cmVisualStudio10TargetGenerator::ComputeClOptions()
|
bool cmVisualStudio10TargetGenerator::ComputeClOptions()
|
||||||
{
|
{
|
||||||
std::vector<std::string> const* configs =
|
std::vector<std::string> const* configs =
|
||||||
this->GlobalGenerator->GetConfigurations();
|
this->GlobalGenerator->GetConfigurations();
|
||||||
for(std::vector<std::string>::const_iterator i = configs->begin();
|
for(std::vector<std::string>::const_iterator i = configs->begin();
|
||||||
i != configs->end(); ++i)
|
i != configs->end(); ++i)
|
||||||
{
|
{
|
||||||
this->ComputeClOptions(*i);
|
if(!this->ComputeClOptions(*i))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
void cmVisualStudio10TargetGenerator::ComputeClOptions(
|
bool cmVisualStudio10TargetGenerator::ComputeClOptions(
|
||||||
std::string const& configName)
|
std::string const& configName)
|
||||||
{
|
{
|
||||||
// much of this was copied from here:
|
// much of this was copied from here:
|
||||||
|
@ -984,7 +991,7 @@ void cmVisualStudio10TargetGenerator::ComputeClOptions(
|
||||||
cmSystemTools::Error
|
cmSystemTools::Error
|
||||||
("CMake can not determine linker language for target:",
|
("CMake can not determine linker language for target:",
|
||||||
this->Name.c_str());
|
this->Name.c_str());
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
if(strcmp(linkLanguage, "C") == 0 || strcmp(linkLanguage, "CXX") == 0
|
if(strcmp(linkLanguage, "C") == 0 || strcmp(linkLanguage, "CXX") == 0
|
||||||
|| strcmp(linkLanguage, "Fortran") == 0)
|
|| strcmp(linkLanguage, "Fortran") == 0)
|
||||||
|
@ -1044,6 +1051,7 @@ void cmVisualStudio10TargetGenerator::ComputeClOptions(
|
||||||
}
|
}
|
||||||
|
|
||||||
this->ClOptions[configName] = pOptions.release();
|
this->ClOptions[configName] = pOptions.release();
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
|
|
|
@ -50,8 +50,8 @@ private:
|
||||||
void WriteObjSources();
|
void WriteObjSources();
|
||||||
void WritePathAndIncrementalLinkOptions();
|
void WritePathAndIncrementalLinkOptions();
|
||||||
void WriteItemDefinitionGroups();
|
void WriteItemDefinitionGroups();
|
||||||
void ComputeClOptions();
|
bool ComputeClOptions();
|
||||||
void ComputeClOptions(std::string const& configName);
|
bool ComputeClOptions(std::string const& configName);
|
||||||
void WriteClOptions(std::string const& config,
|
void WriteClOptions(std::string const& config,
|
||||||
std::vector<std::string> const & includes);
|
std::vector<std::string> const & includes);
|
||||||
void WriteRCOptions(std::string const& config,
|
void WriteRCOptions(std::string const& config,
|
||||||
|
|
Loading…
Reference in New Issue