QMake / QtCreatir Какова хорошая стратегия, чтобы скопировать двоичный файл в указанное место - PullRequest
0 голосов
/ 17 января 2019

Я собираю библиотеку для Android, используя QtCreator. После того, как он будет построен, его нужно скопировать в определенное место.

Я использовал QtCreator 4.0.3 с Qt 5.6 и NDK r11b

Я сейчас переношу свой код на QtCreator 4.8.0 с Qt 5.12 и NDK r18b

В QtCreator 4.0.3 у меня было:

DESTDIR = <path to the place where I wish the binary to be copied>

И это сработало идеально (.so файл был скопирован после его создания)

С QtCreator 4.8.0 я получаю ошибку:

move libsde3p_cppunit-g.so <path to the place where I wish the binary to be copied>\libsde3p_cppunit-g.so
process_begin: CreateProcess(NULL, move libsde3p_cppunit-g.so <path to the place where I wish the binary to be copied>\libsde3p_cppunit-g.so, ...) failed.
make (e=2): Le fichier spécifié est introuvable.

Я вижу, что когда сообщается об этой ошибке, <my build folder>\build-cppunit-Android_for_armeabi_v7a_Clang_Qt_5_12_0_for_Android_ARMv7-Debug\libsde3p_cppunit-g.so существует, а <my build folder>\build-cppunit-Android_for_armeabi_v7a_Clang_Qt_5_12_0_for_Android_ARMv7-Debug\android-build\libs\armeabi-v7a\libsde3p_cppunit-g.so еще нет. И я знаю, что QtCreator наконец-то копирует библиотеку из этого первого местоположения во второе. Поэтому, скорее всего, он пытается скопировать библиотеку из неправильного места.

Я пробовал другие варианты:

Попытка QMAKE_POST_LINK = copy... это, по-видимому, никогда не выполняется (QMAKE_POST_LINK = djdkdk не сообщает об ошибке).

Пробные пользовательские цели:

custom_copy_step.target = foo.h
custom_copy_step.commands = $(COPY_FILE) $$shell_path($$OUT_PWD)\lib$${TARGET}.so $$shell_path(<path to the place where I wish the binary to be copied>
QMAKE_EXTRA_TARGETS += custom_copy_step
POST_TARGETDEPS += foo.h

На этот раз не получается с ошибкой:

copy /y <my build folder>\build-cppunit-Android_for_armeabi_v7a_Clang_Qt_5_12_0_for_Android_ARMv7-Debug\libsde3p_cppunit-g.so <path to the place where I wish the binary to be copied>
Le fichier sp‚cifi‚ est introuvable.
make: *** [foo.h] Error 1

И я подтверждаю, что файл lib отсутствует на диске, поэтому похоже, что команда выполняется до фактического создания .so.

Какие инструкции я должен добавить в мой .pro-файл, чтобы выходной .so-файл был скопирован в определенное место?

1 Ответ

0 голосов
/ 17 января 2019

Может заставить работать с QMAKE_POST_LINK (требуется += вместо =):

QMAKE_POST_LINK += $(COPY_FILE) $$shell_path($$OUT_PWD)\lib$${TARGET}.so $$shell_path(<path to the place where I wish the binary to be copied>)
...