On Jan 4, 2008, at 10:57 AM, Alexander Neundorf wrote:

On Friday 04 January 2008, James Bigler wrote:
2008/1/4, Stephen Collyer <[EMAIL PROTECTED]>:
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.

I had suspisions that this was how that bit of code worked, so thanks for clearing this up for me.

There's still the outstanding issue of a flag being added that the user can't control (and may get irritated at), but perhaps a new cached CMake variable could be added to turn the warnings on and off.

James

_______________________________________________
CMake mailing list
[email protected]
http://www.cmake.org/mailman/listinfo/cmake

Reply via email to