Fwd: [CMake] Globally add compiler options for gcc

Alexander Neundorf a.neundorf-work at gmx.net
Fri Jan 4 12:57:36 EST 2008


On Friday 04 January 2008, James Bigler wrote:
> > 2008/1/4, Stephen Collyer <scollyer at netspinner.co.uk>:
> >> This is almost certainly a FAQ but I can't find
> >> an answer anywhere: I'm building using gcc under
> >> Linux and VS2005 under Win32. I want to add, say,
> >> -Wall globally to everything compiled under Linux
> >> but leave the compile options for Win32 untouched.
> >
> > You may put in your main CMakeLists.txt
> >
> > IF(UNIX)
> >     IF(CMAKE_COMPILER_IS_GNUCC)
> >          ADD_DEFINITION(-Wall)
> >     ENDIF(CMAKE_COMPILER_IS_GNUCC)
> > ENDIF(UNIX)
> >
> > This example checks for being under UNIX and GCC is the compiler.
> > If you want to restrict to Linux you should add a test
> > for CMAKE_SYSTEM_NAME value to match "Linux".
> >
> > In this particular case and if you only compile C code
> > you may replace ADD_DEFINITIONS with:
> >
> > SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall")
>
> Doing it this way will most certainly give you grief, unless you add bit
> more infrastructure.  First off, every time you run cmake, it will add
> another -Wall to your CMAKE_C_FLAGS.  Also, I'm a little unsure of this,
> but it may not even set the flags properly without a FORCE in the
> command.  Also, you will find it hard for a user to turn it off if they
> don't wish to see it for some reason.

No, I think you are wrong here, it does work.
What happens is:

CMAKE_C_FLAGS is read from the cache, e.g. "-O2 -ansi"
Then the set happens and appends the -Wall, so CMAKE_C_FLAGS is now
"-O2 -ansi -Wall"
This new value isn't saved to the cache, but stays only in the "regular" cmake 
variable. To get it in the cache SET(... CACHE ... FORCE) would have to be 
used. Only then it would be appended everytime again.

Alex


More information about the CMake mailing list