From e1442ac9c16768962b43575ace24c7cf277c2e74 Mon Sep 17 00:00:00 2001 From: Brad King Date: Mon, 20 Dec 2010 11:56:18 -0500 Subject: [PATCH] Avoid msbuild ".\" idiosyncrasy that builds multiple configs (#11594) If a .sln file refers to a project file with a leading ".\", as in ".\foo.vcxproj" instead of just "foo.vcxproj" or a full path then msbuild behaves strangely. Whenever target foo is built as a dependency of another target, msbuild brings multiple configurations up to date instead of just the requested configuration! Avoid a leading ".\" in project file references to avoid this behavior. This alternative fix to that attempted by commit 57e71533 (Avoid msbuild idiosyncrasy that builds multiple configs, 2010-12-10) avoids use of full path project file references which vcbuild does not support. --- Source/cmGlobalVisualStudio71Generator.cxx | 8 ++++---- Source/cmGlobalVisualStudio7Generator.cxx | 12 ++++++++---- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/Source/cmGlobalVisualStudio71Generator.cxx b/Source/cmGlobalVisualStudio71Generator.cxx index ba1868797c..adb5f2ff7c 100644 --- a/Source/cmGlobalVisualStudio71Generator.cxx +++ b/Source/cmGlobalVisualStudio71Generator.cxx @@ -182,8 +182,8 @@ cmGlobalVisualStudio71Generator::WriteProject(std::ostream& fout, std::string guid = this->GetGUID(dspname); fout << project << dspname << "\", \"" - << this->ConvertToSolutionPath(dir) - << "\\" << dspname << ext << "\", \"{" << guid << "}\"\n"; + << this->ConvertToSolutionPath(dir) << (dir[0]? "\\":"") + << dspname << ext << "\", \"{" << guid << "}\"\n"; fout << "\tProjectSection(ProjectDependencies) = postProject\n"; this->WriteProjectDepends(fout, dspname, dir, t); fout << "\tEndProjectSection\n"; @@ -196,8 +196,8 @@ cmGlobalVisualStudio71Generator::WriteProject(std::ostream& fout, const char* uname = ui->second.c_str(); fout << "Project(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"" << uname << "\", \"" - << this->ConvertToSolutionPath(dir) - << "\\" << uname << ".vcproj" << "\", \"{" + << this->ConvertToSolutionPath(dir) << (dir[0]? "\\":"") + << uname << ".vcproj" << "\", \"{" << this->GetGUID(uname) << "}\"\n" << "\tProjectSection(ProjectDependencies) = postProject\n" << "\t\t{" << guid << "} = {" << guid << "}\n" diff --git a/Source/cmGlobalVisualStudio7Generator.cxx b/Source/cmGlobalVisualStudio7Generator.cxx index d421c7f08b..51b8918499 100644 --- a/Source/cmGlobalVisualStudio7Generator.cxx +++ b/Source/cmGlobalVisualStudio7Generator.cxx @@ -299,6 +299,10 @@ void cmGlobalVisualStudio7Generator::WriteTargetsToSolution( std::string dir = tmf->GetStartOutputDirectory(); dir = root->Convert(dir.c_str(), cmLocalGenerator::START_OUTPUT); + if(dir == ".") + { + dir = ""; // msbuild cannot handle ".\" prefix + } this->WriteProject(fout, vcprojName, dir.c_str(), *target); written = true; @@ -514,8 +518,8 @@ void cmGlobalVisualStudio7Generator::WriteProject(std::ostream& fout, fout << project << dspname << "\", \"" - << this->ConvertToSolutionPath(dir) - << "\\" << dspname << ext << "\", \"{" + << this->ConvertToSolutionPath(dir) << (dir[0]? "\\":"") + << dspname << ext << "\", \"{" << this->GetGUID(dspname) << "}\"\nEndProject\n"; UtilityDependsMap::iterator ui = this->UtilityDepends.find(&target); @@ -524,8 +528,8 @@ void cmGlobalVisualStudio7Generator::WriteProject(std::ostream& fout, const char* uname = ui->second.c_str(); fout << "Project(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"" << uname << "\", \"" - << this->ConvertToSolutionPath(dir) - << "\\" << uname << ".vcproj" << "\", \"{" + << this->ConvertToSolutionPath(dir) << (dir[0]? "\\":"") + << uname << ".vcproj" << "\", \"{" << this->GetGUID(uname) << "}\"\n" << "EndProject\n"; }