[CMake] CMake performs search for includes/libs in non-default compiler search paths.

Andreas Pakulat apaku at gmx.de
Thu Jan 27 09:20:42 EST 2011


On 27.01.11 16:13:09, arrowdodger wrote:
> Hello. On FreeBSD everything, that distributes with system goes to /usr (i
> mean includes go to /usr/includes and libs to /usr/lib) and all 3d party
> stuff goes to /usr/local.
> And the compiler is intentionally set to look only in /usr/include. The same
> is for linker - it's looking for libs only in /usr/lib by default. So, if
> user want to use some 3d-party library, he should add -I/usr/local/include
> and -L/usr/local/lib to build command.
> 
> Now, i'm using find_library() and find_path() to locate 3d-party library in
> such way:
> 
> > find_path(FFI_INCLUDE_PATH ffi.h PATHS ${USER_DEFINED_INCLUDE_DIR})
> > find_library(FFI_LIBRARY_PATH ffi PATHS ${USER_DEFINED_LIB_DIR})
> >
> I'm expecting that search will not succeed until i supply CMake with
> additional directories to search. But it's succeeds because
> CMAKE_SYSTEM_PREFIX_PATH from Modules/Platform/UnixPaths.cmake is set to
> "/usr;/usr/local;/". And this file is included by
> Modules/Platform/FreeBSD.cmake.
> 
> Later i'm doing:
> 
> > if(${USER_DEFINED_INCLUDE_DIR})
> >   include_directories(${FFI_INCLUDE_DIR})
> > endif()
> >
> 
> On FreeBSD it leads to "No such file or directory: ffi.h" error. So here is
> the question: Is this a CMake bug?

No, the bug is in your cmake code. You shouldn't use
USER_DEFINED_INCLUDE_DIR to decide wether to add the path to the
include-directories or not. Instead use the FFI_INCLUDE_PATH variable to
decide that, it won't hurt if FFI_INCLUDE_PATH happens to be /usr/include.

The reason cmake searches in /usr/local in addition to /usr is simply a
convenience matter. Its a common prefix to have non-distribution software
installed in and for the same reason things like /opt/local, /opt/csw and
/usr/openwin are being searched for by default.

Andreas

-- 
Beware of a dark-haired man with a loud tie.


More information about the CMake mailing list