我已经在模块的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本身中按Build
,Make Project
,Rebuild Project
或类似内容。本机构建似乎可以在0秒内成功“完成”,但没有任何构建。 build/intermediates/cmake
目录甚至根本没有创建。
问题是:制作项目时Android Studio会构建哪些目标?以及如何在我的自定义目标中构建它,在任何其他环境下似乎都能正常工作?
答案 0 :(得分:0)
我也刚遇到这个问题。经过一番摆弄之后,我想我找到了答案。 Android Studio不会构建ALL_BUILD目标。因此,仅指定目标add_custom_target(<my_target> ALL ...)
不适用于AS。我使用add_dependencies(<my_exe> <my_custom_target>)
将自定义目标添加为对我的主要可执行文件的依赖关系,并且效果很好。