diff --git a/Source/cmLocalVisualStudio6Generator.cxx b/Source/cmLocalVisualStudio6Generator.cxx index 5b5ce0bed..ec4bbe203 100644 --- a/Source/cmLocalVisualStudio6Generator.cxx +++ b/Source/cmLocalVisualStudio6Generator.cxx @@ -289,11 +289,18 @@ void cmLocalVisualStudio6Generator::WriteDSPFile(std::ostream& fout, std::string source = cc->first; const cmSourceGroup::Commands& commands = cc->second.m_Commands; std::vector depends; - const char* compileFlags = 0; + std::string compileFlags; if(cc->second.m_SourceFile) { // Check for extra compiler flags. compileFlags = cc->second.m_SourceFile->GetProperty("COMPILE_FLAGS"); + if(cmSystemTools::GetFileFormat( + cc->second.m_SourceFile->GetSourceExtension().c_str()) + == cmSystemTools::CXX_FILE_FORMAT) + { + // force a C++ file type + compileFlags += " /TP "; + } // Check for extra object-file dependencies. const char* dependsValue = @@ -329,13 +336,14 @@ void cmLocalVisualStudio6Generator::WriteDSPFile(std::ostream& fout, std::string totalCommandStr; totalCommandStr = this->CombineCommands(commands, totalCommand, source.c_str()); - const char* comment = totalCommand.m_Comment.c_str(); + const char* comment = totalCommand.m_Comment.c_str(); + const char* flags = compileFlags.size() ? compileFlags.c_str(): 0; this->WriteCustomRule(fout, source.c_str(), totalCommandStr.c_str(), (*comment?comment:"Custom Rule"), totalCommand.m_Depends, - totalCommand.m_Outputs, compileFlags); + totalCommand.m_Outputs, flags); } - else if(compileFlags) + else if(compileFlags.size()) { for(std::vector::iterator i = m_Configurations.begin(); i != m_Configurations.end(); ++i) @@ -895,8 +903,6 @@ void cmLocalVisualStudio6Generator::WriteDSPHeader(std::ostream& fout, const cha flagsDebugRel += " -DCMAKE_INTDIR=\\\"RelWithDebInfo\\\" "; flags = " "; flags = m_Makefile->GetDefinition("CMAKE_CXX_FLAGS"); - // force a C++ file type - flags += " /TP "; } // if C and the target is not CXX else if(gen->GetLanguageEnabled("C") && !target.HasCxx()) diff --git a/Source/cmLocalVisualStudio7Generator.cxx b/Source/cmLocalVisualStudio7Generator.cxx index 85ef8c8ca..da80e6f4e 100644 --- a/Source/cmLocalVisualStudio7Generator.cxx +++ b/Source/cmLocalVisualStudio7Generator.cxx @@ -250,7 +250,6 @@ void cmLocalVisualStudio7Generator::WriteConfiguration(std::ostream& fout, if(target.HasCxx()) { flags = m_Makefile->GetDefinition("CMAKE_CXX_FLAGS"); - flags += " -TP "; } else { @@ -725,13 +724,19 @@ void cmLocalVisualStudio7Generator::WriteVCProjFile(std::ostream& fout, { std::string source = cc->first; const cmSourceGroup::Commands& commands = cc->second.m_Commands; - const char* compileFlags = 0; + std::string compileFlags; std::string additionalDeps; if(cc->second.m_SourceFile) { // Check for extra compiler flags. compileFlags = cc->second.m_SourceFile->GetProperty("COMPILE_FLAGS"); - + if(cmSystemTools::GetFileFormat( + cc->second.m_SourceFile->GetSourceExtension().c_str()) + == cmSystemTools::CXX_FILE_FORMAT) + { + // force a C++ file type + compileFlags += " /TP "; + } // Check for extra object-file dependencies. const char* deps = cc->second.m_SourceFile->GetProperty("OBJECT_DEPENDS"); @@ -765,12 +770,13 @@ void cmLocalVisualStudio7Generator::WriteVCProjFile(std::ostream& fout, totalCommandStr = this->CombineCommands(commands, totalCommand, source.c_str()); const char* comment = totalCommand.m_Comment.c_str(); + const char* flags = compileFlags.size() ? compileFlags.c_str(): 0; this->WriteCustomRule(fout, source.c_str(), totalCommandStr.c_str(), (*comment?comment:"Custom Rule"), totalCommand.m_Depends, - totalCommand.m_Outputs, compileFlags); + totalCommand.m_Outputs, flags); } - else if(compileFlags || additionalDeps.length()) + else if(compileFlags.size() || additionalDeps.length()) { for(std::vector::iterator i = configs->begin(); i != configs->end(); ++i) @@ -779,7 +785,7 @@ void cmLocalVisualStudio7Generator::WriteVCProjFile(std::ostream& fout, << "\t\t\t\t\tName=\"" << *i << "|Win32\">\n" << "\t\t\t\t\t