在Android Studio CMake中使用add_custom_target进行构建

时间:2018-06-26 06:58:13

标签: android android-studio cmake

我已经在模块的CMakeLists.txt中创建了一些自定义目标执行,并根据模块的build.gradle中的标准模板引用了以下内容:

externalNativeBuild {
    cmake {
        path "CMakeLists.txt"
    }
}

CMakeLists.txt包含以下命令(我想这里已经包括了所有与之相关的内容):

add_custom_command(
    OUTPUT ${BUILT_PRODUCT_FILEPATH} # The library built by ${CUSTOM_BUILD_COMMAND}, defined elsewhere
    COMMAND ${CUSTOM_BUILD_COMMAND} --product ${PRODUCT_NAME} ${CUSTOM_BUILD_ARGS}
    DEPENDS ${SOURCE_FILES} ${BUILT_PRODUCT_DEPENDENCIES}
    WORKING_DIRECTORY ${PROJECT_DIRECTORY}
    VERBATIM
)

add_custom_command(
    OUTPUT ${OUTPUT_PRODUCT_FILEPATH} # filename of BUILT_PRODUCT_FILEPATH in the CMAKE_LIBRARY_OUTPUT_DIRECTORY
    COMMAND ${CMAKE_COMMAND} -E copy ${BUILT_PRODUCT_FILEPATH} ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
    DEPENDS ${BUILT_PRODUCT_FILEPATH}
)

add_custom_target(
    ${PRODUCT_NAME} ALL  # NOTE: I'm using ALL here - could this be part of the issue?
    DEPENDS ${OUTPUT_PRODUCT_FILEPATH}
)

当我运行cmake -G Ninja $MODULE_PATH && cmake --build .时,将建立我的目标,并且.so库会按预期放入APK。

如果我在Android Studio中运行Refresh Linked C++ Projects并导航到$MODULE_PATH/.externalNativeBuild/cmake/debug/armeabi-v7a并运行ninja,构建也可以正常工作(如上所述)。

不起作用只是在Android Studio本身中按BuildMake ProjectRebuild Project或类似内容。本机构建似乎可以在0秒内成功“完成”,但没有任何构建。 build/intermediates/cmake目录甚至根本没有创建。

问题是:制作项目时Android Studio会构建哪些目标?以及如何在我的自定义目标中构建它,在任何其他环境下似乎都能正常工作?

1 个答案:

答案 0 :(得分:0)

我也刚遇到这个问题。经过一番摆弄之后,我想我找到了答案。 Android Studio不会构建ALL_BUILD目标。因此,仅指定目标add_custom_target(<my_target> ALL ...)不适用于AS。我使用add_dependencies(<my_exe> <my_custom_target>)将自定义目标添加为对我的主要可执行文件的依赖关系,并且效果很好。