我正在尝试将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
的二进制文件参数。
我真的不知道该怎么做,所以任何帮助都非常感激。
答案 0 :(得分:1)
根据@Andreas的评论,以下是如何使用CMAKE_CURRENT_BINARY_DIR
检测Android NDK CMake版本中的Debug
或Release
变体:
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()