2013-12-16 3 views
3

У меня есть большое дерево источников с несколькими проектами. В одном из проектов используется JNI.Как сделать «ndk-build clean» продолжением ошибки

Когда я пытаюсь «очистить» все дерево исходных текстов, оно проходит и удаляет все объектные файлы и библиотеки. Затем он переходит в мой каталог приложений для очистки.

Когда он попадает в мой JNI проекта осуществляет «НДК-строить чистый», который терпит неудачу, потому что библиотека связать против была удалена как часть чистой:

ndk-build clean 
Android NDK: ERROR:/Users/spartygw/xyz/src/applications/foo/jni/Android.mk:bar: LOCAL_SRC_FILES points to a missing file  
Android NDK: Check that /Users/spartygw/xyz/src/applications/foo/jni/../../../../lib/libbar.a exists or that its path is correct 
/Users/spartygw/android-ndk-r6b/build/core/prebuilt-library.mk:43: *** Android NDK: Aborting . Stop. 
make[3]: *** [clean_android] Error 2 
make[2]: *** [clean] Error 2 
make[1]: *** [clean] Error 2 
make: *** [clean] Error 2 

Я попытался добавить «NDK -build -k clean "и" ndk-build --ignore clean ", но он сбрасывается независимо.

Как я могу сделать ndk-build игнорировать зависимость от библиотек, которые еще не построены, и просто очистить локальные объекты?

+1

Вы могли бы позволить чистой запустить правило вашего файла сделать «НДК-строить чистый» первый. – tiguchi

+0

Хорошая идея, но все еще сталкивается с проблемой, если я дважды делаю «чистую». Поверьте мне, если бы это было ПРОСТО, я мог бы с этим жить, но если я проведу это, я получу жалобы. – spartygw

ответ

4

ndk-buid содержит старую библиотеку prebuit, которая не должна исчезать даже в чистой сборке. Существует нестандартный шаг, который создает libbar.a и копирует его на ../../../../lib/.

Если у вас есть веские причины не связывать с libbar.a непосредственно с места, где он построен (…/obj/local/armeabi), то у вас есть два варианта: либо include $(PREBUILT_STATIC_LIBRARY) условно, если ее $ (LOCAL_SRC_FILES) присутствует, или если чистый не является целью.

Следит простую схему первого подхода:

include $(CLEAR_VARS) 
LOCAL_MODULE = bar 
LOCAL_PATH := ../../../../lib 
LOCAL_SRC_FILES := libbar.a 
ifneq (,$(wildcard $(LOCAL_PATH)/$(LOCAL_SRC_FILES))) 
    include $(PREBUILT_STATIC_LIBRARY) 
endif 
+0

Я не могу понять синтаксис для условного включения, основанного на том, существует ли LOCAL_SRC_FILES -или- как сделать действие на! Clean. Можете ли вы помочь, разработав свой ответ? – spartygw

+0

См. Обновление. Но позвольте мне повторить еще раз, это не решение _clean_ (каламбур). Чтобы облегчить вашу жизнь в долгосрочной перспективе, вы должны устранить шаг, который копирует 'libbar.a' в' ../../../../ lib/'. –

+1

Спасибо, Алекс ... теперь, когда вы показываете мне использование $ (wildcard ...) и ifneq (, ...), это имеет смысл. Хорошо, что я знаю этот самородок на будущее. – spartygw

Смежные вопросы