[CMake] CheckSymbolExists fails with multiple header files

Andreas Mohr andi at lisas.de
Sat May 12 05:27:48 EDT 2012


Hi,

On Fri, May 11, 2012 at 03:41:59PM -0400, cmake-request at cmake.org wrote:
> Date: Fri, 11 May 2012 13:32:55 -0400
> From: Leif Walsh <leif.walsh at gmail.com>
> 
> I want to check whether M_MMAP_THRESHOLD is defined in either malloc.h or sys/malloc.h, and whether CLOCK_REALTIME is defined in either time.h or sys/time.h.  I thought this would work:
> 
> check_symbol_exists(M_MMAP_THRESHOLD "malloc.h;sys/malloc.h" HAVE_M_MMAP_THRESHOLD)
> check_symbol_exists(CLOCK_REALTIME "time.h;sys/time.h" HAVE_CLOCK_REALTIME)
> 
> In this case, I found CLOCK_REALTIME but not M_MMAP_THRESHOLD (they both exist on this system, btw).

I don't have much experience in this area, but are you sure
that M_MMAP_THRESHOLD does indeed exist after including this header
in an app?
This may easily be one of the cases where it gets defined by the header
*only* in case a specific "SDK variant/mode" define was provided by the user.
(see e.g. the popular case of math.h, where certain defines have to be provided
before including it, in order to gain access to certain features)

If this is the case here, then CheckSymbolExists.cmake perhaps should be
extended to document these potential include pre-conditions.


The best way to verify define existence would obviously be a more _manual_ compile setup
of a dummy source plus header include.

Andreas Mohr


More information about the CMake mailing list