В Android NDK я создаю файлы JNI, созданные автоматически SWIG. callmanager_wrap.cpp является частью общей библиотеки:
LOCAL_SRC_FILES += callmanager_wrap.cpp
include $(BUILD_SHARED_LIBRARY)
Но я хотел бы добавить/отредактировать callmanager_wrap.cpp
перед компиляцией. Чтобы быть более явным:
cat jnistuff.txt >> callmanager_wrap.cpp
Содержимое, которое мне нужно добавить, известно заранее, но callmanager_wrap.cpp не. Он генерируется SWIG. В конечном счете, мое пользовательское правило должно выполнить следующую команду для генерации callmanager_wrap.cpp:
swig -c++ -java -package com.package.my -o callmanager_wrap.cpp callmanager.i
Согласно этот пост, невозможно добавить пользовательские правила к Android.mk
. Но в Android-источниках, я считаю, что есть несколько шагов обработки Android.mk
после ВСТУПЛЕНИЯ или УСТАНОВКИ. Я попробовал следующее:
MY_JNI_WRAP=callmanager_wrap.cpp
include $(CLEAR_VARS)
LOCAL_SRC_FILES += callmanager_wrap.cpp
LOCAL_INTERMEDIATE_TARGETS += myjni
myjni:
echo "in myjni target"
swig -c++ -java -package com.package.my -o $(MY_JNI_WRAP) callmanager.i
cat jnistuff.txt >> $(MY_JNI_WRAP)
include $(BUILD_SHARED_LIBRARY)
Но цель myjni
никогда не вызывается.
- Для чего используется LOCAL_INTERMEDIATE_TARGETS?
- Могу ли я достичь того, что я хочу сделать здесь, не создавая внешний файл script или makefile?