[CMake] find_file - strange behavior when using Android toolchain

ugesh reddy abhiugeshreddy at gmail.com
Wed Jul 31 03:49:07 EDT 2019


Hi,

I also have the same issue with find_file/find_path/find_package when I use
the Android NDK and Eric's explanation make sense.

One way to solve this

find_file(AWSSDK_CORE_HEADER_FILE Aws.h
            "${AWSSDK_ROOT_DIR}/${AWSSDK_INSTALL_INCLUDEDIR}/aws/core"

"${AWSSDK_DEFAULT_ROOT_DIR}/${AWSSDK_INSTALL_INCLUDEDIR}/aws/core"
*            NO_CMAKE_FIND_ROOT_PATH*
*            NO_CMAKE_SYSROOT*
            )

Regards,
Ugesh Gurram.

On Wed, Jul 31, 2019 at 9:16 AM Eric Doenges <doenges at mvtec.com> wrote:

> 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 | Tel: +49 89 457 695-0 | 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
>
>
> [image: MVTec Software GmbH Logo]
> --
>
> Powered by www.kitware.com
>
> Please keep messages on-topic and check the CMake FAQ at:
> http://www.cmake.org/Wiki/CMake_FAQ
>
> Kitware offers various services to support the CMake community. For more
> information on each offering, please visit:
>
> CMake Support: http://cmake.org/cmake/help/support.html
> CMake Consulting: http://cmake.org/cmake/help/consulting.html
> CMake Training Courses: http://cmake.org/cmake/help/training.html
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Follow this link to subscribe/unsubscribe:
> https://cmake.org/mailman/listinfo/cmake
>


-- 
 Ugesh
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://cmake.org/pipermail/cmake/attachments/20190731/1a6e7331/attachment-0001.html>


More information about the CMake mailing list