[CMake] PROJECT() command when cross compiling

Kishore kitts.mailinglists at gmail.com
Wed Jul 7 11:24:52 EDT 2010


On Friday 02 Jul 2010 12:36:17 am Kishore wrote:
> On Friday 02 Jul 2010 12:07:07 am Alexander Neundorf wrote:
> > On Thursday 01 July 2010, Kishore wrote:
> > > It seems that the PROJECT() command does a fair bit behind the scenes
> > > and is not documented enough. It seems to "reset" several variable
> > > created before it was first called.
> > > 
> > > Since i use cmake from cross compilation, i have created Platform files
> > > for Generic-gcc.cmake and Generic-gcc-uc3b1256.cmake (for the processor
> > > that I use)
> > > 
> > > 1) It seems that these files are invoked inside the PROJECT() command
> > > 2) The platform files set up some needed variables such as
> > > CMAKE_C_FLAGS 3) When the PROJECT() command finishes, the variable
> > > CMAKE_C_FLAGS is again empty.
> > 
> > project() automatically enable the languages, if no languages are given,
> > it  tries C and C++. While doing this, a whole bunch of variables are
> > set.
> 
> Fair enough. But then it should take into account the values i have set for
> some of those variables in the platform modules. OTOH if it's wrong to be
> setting those variables in the platform files where else should they be set
> and what is the role of they platfrom modules?

This does not seem to be well documented but the way to actually set the right 
values for those variable is to use the <VAR>_INIT form. This works as 
expected but is not a documented variable.

Similarly, in my project, I want to configure in Release mode if the user does 
not explicitly specify any at cmake time. Again, the solution for this seems 
to be

SET(CMAKE_BUILD_TYPE_INIT Release)
PROJECT(MyProject)

i.e. set the variable CMAKE_BUILD_TYPE_INIT before the first call to PROJECT(). 
Hope this helps someone. I wonder how many such *_INIT variables are 
understood by cmake.
-- 
Cheers!
Kishore


More information about the CMake mailing list