[CMake] find_file - strange behavior when using Android toolchain

Eric Doenges doenges at mvtec.com
Wed Jul 31 03:16:29 EDT 2019


Am 31.07.19 um 08:20 schrieb Stephan Menzel:
> Hello all,
>
> I'm trying to adapt my CMake based toolchain to Android and I'm 
> noticing very strange behavior that I'd like to ask about.
> My toolchain is C++ based with some dependencies such as Boost, 
> OpenSSL or protobuf. So far it works on a variety of platforms such as 
> Windows (MSVC), several Linuxes, including Raspbian on ARM. So I 
> considered myself well prepared for Android, thinking it can't be that 
> different. How wrong I was... I'm cross compiling from a Linux system, 
> which is able to build the source in question just fine with clang and 
> gcc. Most recent Android SDK and bundled NDK.
>
> As soon as I started building and finding my 3rd party dependencies I 
> noticed that many commands in my own scripts or others that try to 
> find a file (like a header) or a lib fail despite the file being there.
> Like here in this case for example (randomly taken from the AWS SDK 
> installed CMake finders):

My experience has been that find_file and friends behave in unexpected 
ways when you set CMAKE_SYSROOT. In our toolchain files, we set

set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)

as suggested in the cmake-toolchains(7) documentation. We then add the 
path to the top-level directory where we keep all our thirdparty 
dependencies to CMAKE_FIND_ROOT_PATH, as otherwise find_package and 
find_path cannot find anything even when we give them the absolute path 
where to search (the find_file documentation suggests that the elements 
of the CMAKE_FIND_ROOT_PATH are prepended to the paths specified in the 
find_file arguments, but that does not seem to happen if the search 
paths are subpaths of the CMAKE_FIND_ROOT_PATH). My guess would be that 
the NDK does something similar, meaning you would need to add the path 
where to look for AWS to CMAKE_FIND_ROOT_PATH.

CMake feature request: it would be real nice to have a verbose mode for 
the find_XXX functions that tell you exactly where CMake is looking for 
stuff and why to help debug problems like this.

With kind regards,
Eric

-- 

*Dr. Eric Dönges *
Senior Software Engineer

MVTec Software GmbH | Arnulfstr. 205 | 80634 Munich | Germany
doenges at mvtec.com <mailto:doenges at mvtec.com> | Tel: +49 89 457 695-0 | 
www.mvtec.com <http://www.mvtec.com>

Sign up <http://www.mvtec.com/newsletter> for our MVTec Newsletter!

Geschäftsführer: Dr. Wolfgang Eckstein, Dr. Olaf Munkelt
Amtsgericht München HRB 114695

MVTec Software GmbH Logo
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://cmake.org/pipermail/cmake/attachments/20190731/097a3902/attachment.html>


More information about the CMake mailing list