[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