我在用着android-cmake http://code.google.com/p/android-cmake/编译 Android 应用程序。这实质上创建了一个 CMake 工具链文件,用于使用 Android NDK 提供的工具链。
As with 这个相关问题 https://stackoverflow.com/questions/5990661/cmake-find-packagethreads-for-android-cross-compilation,我的 CMakeLists.txt 文件中的以下行遇到问题:
find_package(Threads REQUIRED)
头文件位于
~/Android/android-ndk-r7/platforms/android-8/arch-arm/usr/include/pthread.h
库文件位于
~/Android/android-ndk-r7/platforms/android-8/arch-arm/usr/lib/libthread_db.so
问题是 FindThreads.cmake 调用CHECK_INCLUDE_FILES("pthread.h", CMAKE_HAVE_PTHREAD_H)
这似乎不需要检查该目录。
根据CMake 的有用变量 wiki 页面 http://cmake.org/Wiki/CMake_Useful_Variables#Environment_Variables 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
...或者我是否直接在 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)
...(这确实被执行,消息被打印),以及${ANDROID_NDK_SYSROOT}
包含
/Users/martin/Android/android-ndk-r7/platforms/android-8/arch-arm
我仍然收到消息
找不到线程(缺少:Threads_FOUND)
有人对我做错了什么有什么建议吗?