[CMake] Patch: Add NO_CACHE option to find_xxx commands

Miguel A. Figueroa-Villanueva miguelf at ieee.org
Mon Jul 7 10:27:12 EDT 2008


On Mon, Jul 7, 2008 at 8:41 AM, Bill Hoffman wrote:
> Miguel A. Figueroa-Villanueva wrote:
>>
>> On Mon, Jul 7, 2008 at 2:04 AM, Enrico Scholz wrote:
>>>
>>> "Miguel A. Figueroa-Villanueva" writes:
>>>>
>>>> I would like to propose the addition of a NO_CACHE keyword to the
>>>> find_xxx commands that would treat <VAR> as a non-cached variable.
>>>
>>> Better wolution would be the equivalent of autoconf's './config.status
>>> --recheck', e.g. reinvoking cmake with empty cache but with original
>>> configuration options.
>>
>> This is not what we want. We want to keep the cache variables since
>> the user might have changed it in the gui.
>>
>> We just want some variables not to go into the cache (and hence not be
>> presented in the gui), but they automatically make it to the cache
>> because they are used in the find_xxx set of commands.
>>
>
> There is one more down side to NO_CACHE.  It will mean that CMake will look
> for these libraries every time it runs.  If we did this with all modules
> things would get pretty slow.

Yes, but usually one doesn't want to add the NO_CACHE variable,
because we want the user to specify it if we can't guess it or if we
guess it incorrectly. It is only for constrained situations which are
not the common case I guess.

> I think what would be better is some sort of
> dependent variable scheme and internal cache variables that get cleared when
> the main variable changes.  When wxWidgets_LIB_DIR changes, then
> wxWidgets_core_LIBRARY should be looked up again.

This is what I suggested in feature request:

http://public.kitware.com/Bug/view.php?id=7286

I think it would be useful to have this, but I still see value in the
NO_CACHE option.

> Also, I assume that you
> do not want to allow the core library to be in a different directory than
> wxWidgets_LIB_DIR which would be the other effect.  However, if you always
> know where wxWidgets_core_LIBRARY is relative to wxWidgets_LIB_DIR, then why
> do you need to use find_library to find it?

Hello Bill,

Try coding this with IF/ELSE EXISTS without knowing the version
number, of course (any example with several NAMES will demonstrate
what I mean):

find_library(wxWidgets_core_LIBRARY
  NAMES
    wxmsw29_core
    wxmsw28_core
    wxmsw27_core
    wxmsw26_core
    wxmsw25_core
  PATHS ${wxWidgets_LIB_DIR}
  NO_DEFAULT_PATH
  NO_CACHE
  )

Not to mention handling the .exe extension (find_program), the lib
prefix, the lib extension (.a, .so, etc), depending on the platform. I
mean the above will find:

wxmsw29_core.dll
wxmsw29_core.lib
libwxmsw29_core.a
libwxmsw29_core.so
etc.

I just think the find_XXX with NO_CACHE is much easier and expressive.
The find_xxx commands do a lot of work to handle these sort of things
that anyone trying to code this with the IF/ELSE structure would need
to understand for all platforms.

--Miguel


More information about the CMake mailing list