[CMake] CHECK_INCLUDE_FILES ignores CMAKE_FIND_ROOT_PATH, but should it?

Bjørn Forsman bjorn.forsman at gmail.com
Thu Jan 20 18:52:40 EST 2011


Hi Alexander,

Thanks for your reply.

2011/1/20 Alexander Neundorf <a.neundorf-work at gmx.net>:
> On Monday 10 January 2011, Bjørn Forsman wrote:
>> Hi all,
>>
>> I just found out that CHECK_INCLUDE_FILES ignores CMAKE_FIND_ROOT_PATH. The
>> documentation for CHECK_INCLUDE_FILES says:
>>
>>   ...
>>   The following variables may be set before calling this macro  to
>>   modify the way the check is run:
>>
>>     CMAKE_REQUIRED_FLAGS = string of compile command line flags
>>     CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar)
>>     CMAKE_REQUIRED_INCLUDES = list of include directories
>>
>> So it seems intentional. But wouldn't it make sense to let
>> CHECK_INCLUDE_FILES look in CMAKE_FIND_ROOT_PATH? Or maybe more precise,
>> give the compiler include flags for
>> CMAKE_FIND_ROOT_PATH/{include/,usr/include}? It just seems wrong to me that
>> include files in CMAKE_FIND_ROOT_PATH can be ignored like that and it
>> destroys the meaning of CMAKE_FIND_ROOT_PATH. Comments?
>>
>> Is maybe CHECK_INCLUDE_FILES deprecated and FIND_PATH/FIND_FILE is the way
>> to go?
>
> check_include_files() is there to check whether header files in the compilers
> system include path exist, i.e. which are found without any -I switches.
> So, from that POV, the behaviour is ok.

Aha, so software using check_include_files() to look for *external*
packages/libraries _are doing it wrong_?

But I don't understand the use case for check_include_files(). When
would you want to limit yourself to only system include paths?

> Can I actually tell the compiler/gcc to ignore its standard include dirs ?

AFAIK, GCC supports this. From 'man gcc':

--sysroot=dir
           Use dir as the logical root directory for headers and
libraries.  For example, if the
           compiler would normally search for headers in /usr/include
and libraries in /usr/lib, it
           will instead search dir/usr/include and dir/usr/lib.

> What header files are you testing ?
> From libc or from some other library ?

The cdrkit package uses check_include_files() on at least
sys/capability.h, from libcap. And libcap is an external library. So I
guess the right thing would be to patch cdrkit?

Best regards,
Bjørn Forsman


More information about the CMake mailing list