[cmake-developers] Specifying VS target platform

Patrick Gansterer paroga at paroga.com
Tue Sep 18 02:23:42 EDT 2012


On Mon, 17 Sep 2012 09:57:28 -0400, Brad King wrote:
> On 09/14/2012 05:59 PM, Patrick Gansterer wrote:
>> Maybe you can merge the first patch already.
>
> Yes, done.
>
>>> The idea of a "generator platform" is not generic among all 
>>> generators.
>>> Rather than the general CMAKE_GENERATOR_PLATFORM infrastructure I'd
>>> generator-specific handling.  The value of -GP should be passed to 
>>> the
>>> global generator created from -G.  If the generator does not 
>>> support
>>> platform specification in this way then -GP should be an error (all
>>> generators except VS >= 8).  If the generator does support -GP then 
>>> it
>>> should do its own thing to save the value.  For VS save it in a 
>>> cache
>>> entry like "CMAKE_VS_PLATFORM" (we have "CMAKE_VS_PLATFORM_TOOLSET"
>>> already for the VS 10 toolchain in some cases).
>>
>> I'm not a big fan of your ideas: What about the parts where we
>> pass the generator platform to other parts? Do we want to add
>> branches for every generator type to get get correct value for
>> the -GP parameter (e.g. if (CMAKE_GENERATOR == "Visual Studio
>> ...") "-GP ${CMAKE_VS_PLATFORM}")? IMHO that's not a good
>> idea. Also handling for making sure that generator platform
>> isn't changed by the user (like we do for -G already) in a
>> second run of CMake must be duplicated later if we add -GP to
>> more than one generator. (and so on...)
>
> Good points, but we still need to reject -GP when using generators
> for which it does not make sense.  I think it may be moot anyway;
> see below.
>
>>> I realized that existing projects may test ${CMAKE_GENERATOR} to 
>>> look
>>> for things like "Win64".  For compatibility we need to make sure 
>>> that
>>>
>>> -G "Visual Studio 10" -GP x64
>>>
>>> results in CMAKE_GENERATOR being set to
>>>
>>> -G "Visual Studio 10 Win64"
>>>
>>> while processing CMake code even if it is not used that way
>>> internally.  Of course for future VS versions the generator names
>>> will not need to work this way, only the existing ones.
>>
>> Since we need to support -G "Visual Studio 10 Win64" anyway, I don't 
>> see
>> much problem if such cases will work with -G "Visual Studio 10 
>> Win64",
>> but not with -G "Visual Studio 10" -GP x64.
>
> We are talking about changing the way the user selects the generator
> in the GUI to be equivalent to -G/-GP.  We cannot process existing
> projects differently depending on how the generator was selected.
>
> I also know there are projects that pass ${CMAKE_GENERATOR} to
> internal invocations of CMake in order to say "build it like I'm
> built".  These paths would not work if any information moved over
> to CMAKE_GENERATOR_PLATFORM or an equivalent variable.
>
> I think the value of -GP has to be stored in CMAKE_GENERATOR at
> the end of the generator name as it is now.  The new option and GUI
> updates are really just about simplifying the selection of the
> generator and avoiding per-platform global generators in the internal
> implementation.  Users can either use -G and specify the full
> generator name with platform or use -G/-GP separately but either way
> the value of CMAKE_GENERATOR will be the same.
>
> This can probably be improved in the future with a new cmake policy
> but I don't want to open that can of worms just for WinCE.  I think
> you can implement -G/-GP such that the values are both stored in the
> CMAKE_GENERATOR value.  Internally we won't need a separate global
> generator for every platform anymore, but that does not change the
> public interface.

If we store everything in one variable (via string concatenation) I 
don't see much value in an extra -GP switch. We need to split the 
${CMAKE_GENERATOR} variable into generator+platform then all the time 
anyway.
Maybe we can only change to current exact match of the generator name 
to a "startsWith" and let the global generator class decide if the 
generator name is valid?

-- Patrick



More information about the cmake-developers mailing list