[CMake] Re: Re: FindQt4 in 2.4.8 bug
Bill Hoffman
bill.hoffman at kitware.com
Fri Feb 1 09:52:45 EST 2008
Fernando Cacciola wrote:
> Hi Bill,
>
>> Can you add a :
>
> Better let me start over, I think I know what's going on now.
>
> Maybe is the intended behaviour. If it is, I think is quite odd.
>
>
> Consider the following simple script:
>
> set ( var "whatever" CACHE PATH "" )
> message ( STATUS "${var}" )
>
> I would expect to see "whatever" as the value of var since it is being
> explicitely set, but that's not neccesarily what happens: if the cache
> *already* contains a value for var, say "xyz", then that value sticks
> and var is just never set to "whatever" unless FORCE is added (as I
> found out and reported eariler in this thread)
>
> Is this the expected behaviour?
>
> If it is, then it leads to a problem when SET is used for example like
> this:
>
> set ( QT_INCLUDE_DIR ${qt4_include_dir} CACHE PATH "" )
>
> because if at some earlier run qt4 was actually not found,
> QT_INCLUDE_DIR gets set to NOTFOUND and once there it is never reset to
> the include path even if qt4 is properly found later. The only way out
> this tirany is to delete the cache and star over.
>
> IMO the rule that says "do not override exisitng cache values unless
> FORCE is specified" should be relaxed to have "null values" be always
> overwritten.
>
> Or at the very least there should be a FORCE_IF_NULL option, because it
> makes no sense at all to keep a NOTFOUND value for an INCLUDE_DIR when
> the right path is available.
>
> Best
>
>
OK, I get it now... So, the FIND_* stuff will set a value if it is
NOTFOUND. However, the set command will not. I am thinking it should.
I am not sure what that will break, but it would be consistent with
FIND_*.
This should not be a problem if you start from a clean build tree for
FindQt4.cmake, as QT_INCLUDE_DIR will never get put in the cache as
NOTFOUND by the current FindQt4.cmake. So, I think this is something
we can fix in CMake 2.6. Feel free to create a feature request, "set
CACHE should set NOTFOUND variables".
Thanks for tracking this down.
-Bill
More information about the CMake
mailing list