繁体   English   中英

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

[英]Adding release and debug subdirectories to Android build with Gradle and 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的二进制文件参数。

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

根据@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()

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM