我在我的模块的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构建哪些目标?如何让它构建我的自定义目标,因为任何其他环境都可以正常工作?
install()
命令来注册Android Studio到目标中?我无法使自定义目标与install
命令一起工作。 - ephemer