我正在使用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)
有人对我做错了什么有任何建议吗?