【问题标题】:Building with add_custom_target in Android Studio CMake在 Android Studio CMake 中使用 add_custom_target 构建
【发布时间】:2018-06-26 06:58:12
【问题描述】:

我在我的模块的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,则构建也可以正常工作(如上所述)。

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

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

【问题讨论】:

  • 我是否可能需要为 Android Studio 添加一个install() 命令才能将其注册为目标?我无法让 install 使用自定义目标。

标签: android android-studio cmake


【解决方案1】:

我也遇到了这个问题。经过一番摆弄,我想我找到了答案。 Android Studio 不会构建 ALL_BUILD 目标。所以简单地指定目标add_custom_target(<my_target> ALL ...) 不适用于AS。我使用add_dependencies(<my_exe> <my_custom_target>) 将我的自定义目标作为依赖项添加到我的主可执行文件中,并且效果很好。

【讨论】:

  • 这几乎奏效了,但它对我造成了循环依赖错误,因为my_custom_target 中的$<TARGET_FILE:my_exe> 命令。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-22
  • 2020-02-23
  • 2020-05-01
相关资源
最近更新 更多