diff options
author | Brad King <brad.king@kitware.com> | 2011-04-05 18:28:55 (GMT) |
---|---|---|
committer | CMake Topic Stage <kwrobot@kitware.com> | 2011-04-05 18:28:55 (GMT) |
commit | e560bf4ba3cf860afe5bc8e23cd6d02dd1c366c1 (patch) | |
tree | 36596b088eaa74f17ac151e95e91a98da8646a7f | |
parent | ca10dc47865bd764409c5600ba46d9ceb7367350 (diff) | |
parent | 9a6ff95072f9e03713e1a5d16338d97f9b371f4b (diff) | |
download | CMake-e560bf4ba3cf860afe5bc8e23cd6d02dd1c366c1.zip CMake-e560bf4ba3cf860afe5bc8e23cd6d02dd1c366c1.tar.gz CMake-e560bf4ba3cf860afe5bc8e23cd6d02dd1c366c1.tar.bz2 |
Merge topic 'fix_vs10_object_files'
9a6ff95 Fix for bug where VS2010 did not use .obj files as part of the build.
-rw-r--r-- | Source/cmVisualStudio10TargetGenerator.cxx | 26 | ||||
-rw-r--r-- | Tests/ExternalOBJ/CMakeLists.txt | 6 |
2 files changed, 27 insertions, 5 deletions
diff --git a/Source/cmVisualStudio10TargetGenerator.cxx b/Source/cmVisualStudio10TargetGenerator.cxx index f872838..b8fef25 100644 --- a/Source/cmVisualStudio10TargetGenerator.cxx +++ b/Source/cmVisualStudio10TargetGenerator.cxx @@ -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; } - this->WriteString("<None Include=\"", 2); + // 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; } diff --git a/Tests/ExternalOBJ/CMakeLists.txt b/Tests/ExternalOBJ/CMakeLists.txt index 3fef135..f12de11 100644 --- a/Tests/ExternalOBJ/CMakeLists.txt +++ b/Tests/ExternalOBJ/CMakeLists.txt @@ -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}) |