I dug into CMake’s C++ code and found there’s a generic setting named
EXCLUDE_FROM_ALL that most “targets” use to decide if a project should be under
the default build but, there’s particular target type named “GLOBAL_TARGET”
does use this setting and it’s always excluded from all.
Based on what I’m reading in the CMake’s C++, the safest place to make a
optional change is right at the point where it’s generating Visual Studio
files. The other logic spot in in a function
cmGlobalGenerator::CreateGlobalTarget but, changes here will create a larger
ripple effect on what will most likely go wrong with this type of tinkering.
The following is the spot in the code I have in mind changing and picking up
both an optional setting and the current “target name” being “INSTALL”
Let me know if there’s a better way to allow Visual Studio developers to hit
“F7” and have the “INSTALL” target/vs project run for them. This current C++
will be a private patch for my team but, I prefer if we can have a more public
optional setting for this request.
bool cmGlobalVisualStudio7Generator::IsPartOfDefaultBuild(const char* project,
cmTarget* target)
{
if(target->GetPropertyAsBool("EXCLUDE_FROM_DEFAULT_BUILD"))
{
return false;
}
// if it is a utilitiy target then only make it part of the
// default build if another target depends on it
int type = target->GetType();
if (type == cmTarget::GLOBAL_TARGET)
{
return false;
}
if(type == cmTarget::UTILITY)
{
return this->IsDependedOn(project, target);
}
// default is to be part of the build
return true;
}
The return false after type == cmTarget::GLOBAL_TARGET will become
if ( strcmp(target->GetName(),"INSTALL") == 0 && SOME_OPTIONAL_SETTING )
return true;
else
return false;
}
++David->Bjornbak;
From: Yuri Timenkov [mailto:[email protected]]
Sent: Wednesday, February 08, 2012 7:27 PM
To: BJORNBAK,DAVID (A-Sonoma,ex1)
Cc: [email protected]
Subject: Re: [CMake] Under Visual Studio , allow developers to hit "F7" to run
the INSTALL target
I use a special macro for such purposes, something like this:
Sub Install()
Dim prj As Project
Dim sb As SolutionBuild = DTE.Solution.SolutionBuild
Dim prjs As Projects = DTE.Solution.Projects
For Each prj In prjs
If prj.Name = "INSTALL" Then
sb.BuildProject(sb.ActiveConfiguration.Name<http://sb.ActiveConfiguration.Name>,
prj.UniqueName)
Exit For
End If
Next
End Sub
Good thing is that you can put it on toolbar or bind to hot key and run it
separately (while keeping active project you're debugging).
On Tue, Feb 7, 2012 at 11:47 PM,
<[email protected]<mailto:[email protected]>> wrote:
Developers on our team have found issues with the difference between “INSTALL”
and the default build or “F7” build all under Visual Studio. My question is,
there’s a reasonable way to configure cmake or Visual Studio to run the INSTALL
target when you hit “F7” or use the default “Build Solution” functionality to
run INSTALL.
We’re working a fairly large project and the default setting of having INSTALL
dependent on ALL or separating out the two targets makes sense when you’re
building the entire project.
However, we allow developers to build sub projects and it makes sense if these
sub project just install quickly into a larger pre-built installation
directory. The confusion currently is, they run ALL_BUILD or “F7” and the
build finishes and they forget to run “INSTALL”. Particularly we, had
developers that worked formally on smaller non-Cmake Visual Studio projects and
not Linux so, they’re not used to the make all and then make install defacto
standard.
This request is similar as the following on “Selecting INSTALL target in Visual
Studio Configuration by default” but, I wanted to see if anyone had any other
suggestions on this topic.
http://www.cmake.org/pipermail/cmake/2011-April/044025.html
++David->Bjornbak;
--
Powered by www.kitware.com<http://www.kitware.com>
Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html
Please keep messages on-topic and check the CMake FAQ at:
http://www.cmake.org/Wiki/CMake_FAQ
Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake
--
Powered by www.kitware.com
Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html
Please keep messages on-topic and check the CMake FAQ at:
http://www.cmake.org/Wiki/CMake_FAQ
Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake