我有一个带有基于cmake的构建脚本的跨平台库。由于现在可以使用cmake对android的支持(https://developer.android.com/studio/projects/add-native-code.html),我计划将ndk-build makefile移动到垃圾箱。
我测试了find_package(ZLIB REQUIRED)
并且它运行良好,因为zlib头和库本身可用于NDK sysroot中的所有ABI。
因此,我可以为每个flavor或build类型的cmake cmdline添加任何自定义参数:
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
externalNativeBuild {
cmake {
arguments "-DMYLIB_ENABLE_PROGUARD=ON"
}
}
}
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
externalNativeBuild {
cmake {
arguments "-DMYLIB_ENABLE_PROGUARD=OFF"
}
}
}
}
我的问题是能够为每个ABI设置CMAKE_PREFIX_PATH
以通过FindPackage查找外部静态/共享库。
一般来说,我可以在cmake脚本本身中使用find_library
和include_directories
与${ANDROID_ABI}
一起使用,但我已经拥有多平台支持的工作脚本,我不想添加脏代码,因为有干净的方式(find_package + CMAKE_PREFIX_PATH)。
谢谢大家的时间!
答案 0 :(得分:5)
这不是我们目前支持的内容。我认为它应该是可能的。我打开b.android.com/225884来跟踪它。
答案 1 :(得分:2)
如果你刚刚在ABI之后,你可以做一些事情,比如
if(${ANDROID_ABI} STREQUAL "x86_64")
# ABI xx
endif()
这非常有效并且不像是黑客。我用它来构建OpenSSL(完整用法:https://github.com/schwabe/ics-openvpn/blob/master/main/src/main/cpp/openssl.cmake)
如果你需要真正的口味...我想出了这种超级丑陋的黑色口味:
cmake
# Super hacky way to determine if flavour is normal
# cmake is called with the DCMAKE_LIBRARY_OUTPUT_DIRECTORY that includes the flavour (and archtecture)
#-DCMAKE_LIBRARY_OUTPUT_DIRECTORY=/Users/arne/software/icsopenvpn/main/build/intermediates/cmake/normal/debug/obj/arm64-v8a
if (${CMAKE_LIBRARY_OUTPUT_DIRECTORY} MATCHES "build/intermediates/cmake/.*normal.*/")
# Flavour specific
endif()