Fix for bug where VS2010 did not use .obj files as part of the build.
For VS2010 if a precompiled .obj file was the output of a custom commad, it was used as part of the build. If it was not, then VS did not use it as part of the build. This commit updates the test to check for this issue, and fixes the problem. This fixes bugs #0011891 and
This commit is contained in:
parent
0315d3b66f
commit
9a6ff95072
|
@ -449,6 +449,8 @@ void cmVisualStudio10TargetGenerator::WriteGroups()
|
|||
bool header = (*s)->GetPropertyAsBool("HEADER_FILE_ONLY")
|
||||
|| this->GlobalGenerator->IgnoreFile
|
||||
((*s)->GetExtension().c_str());
|
||||
std::string ext =
|
||||
cmSystemTools::LowerCase((*s)->GetExtension());
|
||||
if(!lang)
|
||||
{
|
||||
lang = "None";
|
||||
|
@ -469,7 +471,7 @@ void cmVisualStudio10TargetGenerator::WriteGroups()
|
|||
{
|
||||
headers.push_back(sf);
|
||||
}
|
||||
else if(sf->GetExtension() == "idl")
|
||||
else if(ext == "idl")
|
||||
{
|
||||
idls.push_back(sf);
|
||||
}
|
||||
|
@ -636,14 +638,28 @@ void cmVisualStudio10TargetGenerator::WriteObjSources()
|
|||
for(std::vector<cmSourceFile*>::const_iterator source = sources.begin();
|
||||
source != sources.end(); ++source)
|
||||
{
|
||||
if((*source)->GetExtension() == "obj")
|
||||
std::string ext =
|
||||
cmSystemTools::LowerCase((*source)->GetExtension());
|
||||
if(ext == "obj" || ext == "o")
|
||||
{
|
||||
if(first)
|
||||
{
|
||||
this->WriteString("<ItemGroup>\n", 1);
|
||||
first = false;
|
||||
}
|
||||
// If an object file is generated, then vs10
|
||||
// will use it in the build, and we have to list
|
||||
// it as None instead of Object
|
||||
if((*source)->GetPropertyAsBool("GENERATED"))
|
||||
{
|
||||
this->WriteString("<None Include=\"", 2);
|
||||
}
|
||||
// If it is not a generated object then we have
|
||||
// to use the Object type
|
||||
else
|
||||
{
|
||||
this->WriteString("<Object Include=\"", 2);
|
||||
}
|
||||
(*this->BuildFileStream ) << (*source)->GetFullPath() << "\" />\n";
|
||||
}
|
||||
}
|
||||
|
@ -665,8 +681,8 @@ void cmVisualStudio10TargetGenerator::WriteCLSources()
|
|||
for(std::vector<cmSourceFile*>::const_iterator source = sources.begin();
|
||||
source != sources.end(); ++source)
|
||||
{
|
||||
std::string ext = (*source)->GetExtension();
|
||||
if((*source)->GetCustomCommand() || ext == "obj")
|
||||
std::string ext = cmSystemTools::LowerCase((*source)->GetExtension());
|
||||
if((*source)->GetCustomCommand() || ext == "o" || ext == "obj")
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
|
|
@ -51,5 +51,11 @@ ADD_CUSTOM_COMMAND(
|
|||
DEPENDS ${EXTERNAL_OBJECT}
|
||||
)
|
||||
|
||||
message("${EXTERNAL_OBJECT}")
|
||||
# Build an executable using the external object file.
|
||||
ADD_EXECUTABLE(ExternalOBJ executable.cxx ${CUSTOM_OBJECT})
|
||||
# A bug showed up in VS2010 where an object file that was
|
||||
# part of a custom commad output worked, but ones that were
|
||||
# not didn't work. So, repeat the executable using the object
|
||||
# directly and not from the output of the copy.
|
||||
ADD_EXECUTABLE(ExternalOBJ2 executable.cxx ${EXTERNAL_OBJECT})
|
||||
|
|
Loading…
Reference in New Issue