【发布时间】:2017-04-16 13:37:47
【问题描述】:
我正在尝试将 Android NDK 项目从 Ant/ndk-build 迁移到 Gradle/CMake。我想从 Windows 上的命令行构建它。我不想使用 Android Studio。它现在几乎已经启动并运行,但还有一件事要解决,那就是:
在我的CMakeFiles.txt 中,我将其他几个包含静态链接器库的目录导入到我的项目中,如下所示:
add_subdirectory("../foobar/src" "../foobar/obj/${ANDROID_ABI}")
现在的问题是指定二进制文件的目录。我已经在使用${ANDROID_ABI} 来确保对象和库文件按体系结构分开。然而,这还不够,因为 Gradle 还将进行调试和发布构建,并且使用上面的行,调试和发布对象和库文件将被写入完全相同的目录,这将使 Gradle 每次我说的时候都重建每个静态库./gradlew build.
那么我该如何解决这个问题呢?我可以在CMakeLists.txt 中使用一个变量来告诉我 Gradle/CMake 当前是为调试还是为发布而构建?我已经尝试了以下方法,但没有成功:
IF(CMAKE_BUILD_TYPE MATCHES DEBUG)
set(BUILDMODE "Debug")
ELSE()
set(BUILDMODE "Release")
ENDIF()
CMAKE_BUILD_TYPE 在使用 Gradle 和 Android 插件构建时似乎总是 != DEBUG,因此 BUILDMODE 将始终是 Release。
我已经考虑了好几个小时了,但我几乎没有想法......不幸的是,似乎也不可能忽略 CMake 的 add_subdirectory 的二进制文件参数。
我真的不知道在这里做什么,所以非常感谢任何帮助。
【问题讨论】:
-
你找到解决办法了吗?
-
是的。我现在使用
add_subdirectory("libfoo" "${CMAKE_CURRENT_BINARY_DIR}/libfoo")。这可以解决问题,因为CMAKE_CURRENT_BINARY_DIR对于调试和发布版本是不同的,但当然它仍然感觉像是一个 hack。
标签: android gradle android-ndk cmake