[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