Сборка с помощью add_custom_target в Android Studio CMake - PullRequest
0 голосов
/ 26 июня 2018

Я создал несколько пользовательских целевых исполнений в модуле 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, как и ожидалось.

Также, если я запускаю Refresh Linked C++ Projects в Android Studio и перехожу на $MODULE_PATH/.externalNativeBuild/cmake/debug/armeabi-v7a и запускаю ninja, сборка тоже работает (как указано выше).

Что не работает простонажимая Build, Make Project, Rebuild Project или что-либо подобное из самой Android Studio.Собственная сборка успешно завершается в 0, но ничего не получается.Каталог build/intermediates/cmake даже не создается.

Вопрос в том, какие цели ставит Android Studio при создании проекта?И как мне заставить его создавать свои собственные цели, которые, как кажется, отлично работают в любой другой среде?

1 Ответ

0 голосов
/ 03 мая 2019

Я тоже столкнулся с этим. После некоторого возни я думаю, что нашел ответ. Android Studio не создает цель ALL_BUILD. Поэтому простое указание цели add_custom_target(<my_target> ALL ...) не работает для AS. Я добавил свою собственную цель в качестве зависимости к основному исполняемому файлу с add_dependencies(<my_exe> <my_custom_target>), и это работало нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...