[cmake-developers] unexpected cmake cache behaviour

Alexander Neundorf neundorf at kde.org
Wed Jul 12 16:23:42 EDT 2006


Hi,

the cache behaviour of cmake is a bit unexpected (2.4 branch here).

Take the following CMakeLists.txt:

find_path(STDIO_H stdio.h)

and run cmake on it.
It will produce an entry "STDIO_H" in CMakeCache.txt.
Then run cmake again, but give a value for STDIO_H:

cmake . -DSTDIO_H=foo

For that run cmake will use "foo" as value for STDIO_H, but it won't go into 
the cache. Instead the entry STDIO_H disappeared completely from 
CMakeCache.txt, so when running make the next time cmake will not know what 
to use for STDIO_H.

Then run cmake again, and specify the type:

cmake . -DSTDIO_H:STRING:foo

Now it will go in the cache with the value foo.

IMO that this doesn't happen for the second case is maybe a bug, but at least 
uncomfortable behaviour. Is this intended this way ?
It seems this is the code in cmCacheManager which implements the behaviour:

    if(t == cmCacheManager::UNINITIALIZED || !ce.Initialized)
      {
      /*
        // This should be added in, but is not for now.
      cmSystemTools::Error("Cache entry \"", (*i).first.c_str(),
                           "\" is uninitialized");
      */
      }

Last week in Trysil at the KDE Four Core meeting I learned that the KDE devs 
are a bunch of tough guys, happily hand-editing CMakeCache.txt and entering 
lines like 
cmake ...some/dir -DCMAKE_INSTALL_PREFIX=/opt/kde4 -DKDE4_IGNORE_DONTPORT=TRUE 
without bitching.
But requiering to enter 
cmake ...some/dir -DCMAKE_INSTALL_PREFIX:PATH=/opt/kde4 
-DKDE4_IGNORE_DONTPORT:BOOL=TRUE
seems like a bit much.
I'd suggest either to default to STRING or at least reuse the type from the 
cache for the new value.

Bye
Alex
-- 
Work: alexander.neundorf AT jenoptik.com - http://www.jenoptik-los.de
Home: neundorf AT kde.org                - http://www.kde.org
      alex AT neundorf.net               - http://www.neundorf.net



More information about the cmake-developers mailing list