[CMake] [v2.8-rc1] - Strange new warning in FindQt4.cmake

Alexander Neundorf a.neundorf-work at gmx.net
Sat Sep 26 05:01:43 EDT 2009


On Saturday 26 September 2009, Christian Ehrlicher wrote:
> Hi,
>
> I get this warning:
>
> -----------------8<----------------------
> CMake Warning (dev) at cmake/modules/FindQt4.cmake:826 (SET):

That's the FindQt4.cmake from kdelibs, right ?
Current trunk ?

>   Local variable "QT4_QTUITOOLS_LIBRARY" is set to
>
>
> optimized;D:/kde/kde-msvc/lib/QtUiTools.lib;debug;D:/kde/kde-msvc/lib/QtUiT
>o olsd.lib
>
>   but the CACHE entry of the same name is set to
>
>     D:/kde/kde-msvc/lib/QtUiTools.lib
>
>   The local variable is hiding the cache value.
>
>   Policy CMP0015 is not set: The set() CACHE mode and option() command make
>   the cache value visible.  Run "cmake --help-policy CMP0015" for policy
>   details.  Use the cmake_policy command to set the policy and suppress
> this warning.
> Call Stack (most recent call first):
>   cmake/modules/FindQt4.cmake:859 (_QT4_ADJUST_LIB_VARS)
>   cmake/modules/MacroOptionalFindPackage.cmake:19 (FIND_PACKAGE)
>   CMakeLists.txt:52 (macro_optional_find_package)
> This warning is for project developers.  Use -Wno-dev to suppress it.
> -----------------8<----------------------
>
>
> Whats wrong here?

With cmake < 2.8.0 

set(FOO foo)
message("FOO 1: ${FOO}")
set(FOO bar ... CACHE)
message("FOO 2: ${FOO}")

produced on the initial cmake run:
FOO 1: foo
FOO 2: bar

and on all cmake runs afterwards:
FOO 1: foo
FOO 2: foo

i.e. the value of FOO in the cache was hidden by the value of the local FOO. 
This was probably not really the expected behaviour.
With cmake 2.8.0 it warns when this happens.

What we do in kdelibs/cmake/modules/FindQt4.cmake is that we do
find_library(QT_QTUITOOLS_LIBRARY ...)
and then later on in _QT4_ADJUST_LIB_VARS() we do 
set(QT_QTUITOOLS_LIBRARY ...RELEASE ... DEBUG)
and finally again:

SET(QT_${basename}_LIBRARY ${QT_${basename}_LIBRARY} CACHE FILEPATH "The Qt 
${basename} library")

The purpose of the last one was to get that value into the cache, but that did 
not work (since there was already a value in the cache, so that set(CACHE) 
didn't change anything. 
Now cmake warns us about that, this is good.
We (I ?) should fix this in kdelibs, probably sync more or less to the 
FindQt4.cmake from cmake.

Alex


More information about the CMake mailing list