相关疑难解决方法(0)

CMake FindThreads.cmake 找不到我的 pthreads.h 标头

我正在使用android-cmake为 Android 编译应用程序。这实质上创建了一个 CMake 工具链文件,用于使用 Android 的 NDK 提供的工具链。

此相关问题一样,我的 CMakeLists.txt 文件中的以下行有问题:

find_package(Threads REQUIRED)
Run Code Online (Sandbox Code Playgroud)

头文件位于

~/Android/android-ndk-r7/platforms/android-8/arch-arm/usr/include/pthread.h
Run Code Online (Sandbox Code Playgroud)

库文件位于

~/Android/android-ndk-r7/platforms/android-8/arch-arm/usr/lib/libthread_db.so
Run Code Online (Sandbox Code Playgroud)

问题是 FindThreads.cmake 调用CHECK_INCLUDE_FILES("pthread.h", CMAKE_HAVE_PTHREAD_H),这似乎不费心去检查那个目录。

根据CMake 的有用变量 wiki 页面, CMAKE_INCLUDE_PATH允许设置标题搜索路径,CMAKE_LIBRARY_PATH允许设置库搜索路径,并且CMAKE_PREFIX_PATH似乎为 find_package 提供了两者。

但是,尽管我是否在运行 cmake 之前设置了环境变量...

export CMAKE_INCLUDE_PATH=~/Android/android-ndk-r7/platforms/android-8/arch-arm/usr:~/Android/android-ndk-r7/platforms/android-8/arch-arm/usr/include
Run Code Online (Sandbox Code Playgroud)

...或者我是否直接在 CMakeLists.txt 中设置它们...

if(ANDROID)
    set(CMAKE_INCLUDE_PATH
        ${ANDROID_NDK_SYSROOT}/usr
        ${ANDROID_NDK_SYSROOT}/usr/include
        ${CMAKE_INCLUDE_PATH}
    )

    set(CMAKE_LIBRARY_PATH
        ${ANDROID_NDK_SYSROOT}/usr
        ${ANDROID_NDK_SYSROOT}/usr/lib
        ${CMAKE_LIBRARY_PATH})

    set(CMAKE_PREFIX_PATH
        ${ANDROID_NDK_SYSROOT}
        ${CMAKE_PREFIX_PATH})

    message(${ANDROID_NDK_SYSROOT})
    message(${CMAKE_INCLUDE_PATH})

endif()

find_package(Threads REQUIRED)
Run Code Online (Sandbox Code Playgroud)

...(这确实被执行,消息被打印),以及哪里${ANDROID_NDK_SYSROOT}包含

/Users/martin/Android/android-ndk-r7/platforms/android-8/arch-arm
Run Code Online (Sandbox Code Playgroud)

我仍然收到消息

找不到线程(丢失:Threads_FOUND)

有人对我做错了什么有任何建议吗?

android cmake

6
推荐指数
1
解决办法
7047
查看次数

标签 统计

android ×1

cmake ×1