使用Gradle和CMake将版本和调试子目录添加到Android版本

时间:2017-04-16 13:37:47

标签: android gradle android-ndk cmake

我正在尝试将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()
使用Gradle和Android插件进行构建时,

CMAKE_BUILD_TYPE似乎总是!= DEBUG,因此BUILDMODE始终为Release

我现在已经考虑了几个小时了,而且我几乎没有想法......不幸的是,似乎也没有可能省略CMake的add_subdirectory的二进制文件参数。

我真的不知道该怎么做,所以任何帮助都非常感激。

2 个答案:

答案 0 :(得分:1)

根据@Andreas的评论,以下是如何使用CMAKE_CURRENT_BINARY_DIR检测Android NDK CMake版本中的DebugRelease变体:

if (CMAKE_CURRENT_BINARY_DIR MATCHES "debug")
    message(STATUS "Debug build detected")
    add_compile_options("-DANDROID_DEBUG") # <-- change this to have an effect on the build
else()
    message(STATUS "Release build detected")
endif()

答案 1 :(得分:-1)

如果没有明确设置上游,您可能想要设置它。

if (NOT CMAKE_BUILD_TYPE)
 SET(CMAKE_BUILD_TYPE Debug)
endif()