2012-03-26 17 views
6

ben basit Android.mk dosyası var: Böyle bir durum ortaya ilginç bir şey 'echo_test.sh' bash betiği çağırmaktır Kabuk komut Android.mk, standart çıkışından çağrısı ve eksik ayırıcı hatası

LOCAL_PATH := $(call my-dir) 
include $(CLEAR_VARS) 

$(shell ($(LOCAL_PATH)/echo_test.sh)) 

LOCAL_MODULE := libecho_test 
LOCAL_MODULE_TAGS := optional 
include $(BUILD_SHARED_LIBRARY) 

. senaryonun içeriği olması durumunda

#!/bin/bash 
echo 'echo is working' >&2 

veya

#!/bin/bash 
echo 'echo is working' >/dev/null 

herşey yolundadır. Eğer eklediğinizde

şeyler bash komut

#!/bin/bash 
echo 'echo is working' 

veya

#!/bin/bash 
echo 'echo is working' >&1 

olduğunda Sonra döndü hata Bu Android NDK 7 ile hem olmuyor

Android.mk:4: *** missing separator. Stop. 

yanlış gidip Android Ice Cream Sandwich 4.0.3'ün oluşturulması sırasında bu modül.

Standart çıktı ve Android build sistemi ile yapılan anlaşmanın ne olduğunu gerçekten anlayamıyorum. Herkesin bir açıklaması var mı?

cevap

10

Android NDK oluşturma sistemi aslında GNU Make. Android.mk dosyasındaki tüm kod geçerli make olmalıdır.

$ (kabuk) çalıştırdığınızda ve değeri bir değişkende saklamıyorsanız, betiğin standart çıktısını Android.mk dosyanıza kopyalamışsınız demektir. Örneğin, dosyanız aşağıdakileri içeriyormuş gibi:

LOCAL_PATH := $(call my-dir) 
include $(CLEAR_VARS) 

echo is working 

LOCAL_MODULE := libecho_test 
LOCAL_MODULE_TAGS := optional 
include $(BUILD_SHARED_LIBRARY) 

.. geçerli değil sözdizimi. Komut dosyanızda> & 2'ye yönlendiriliyor, çünkü çıkış hata çıkışına gider ve konsolda gösterilir.

Vikipedi'nin belirttiği gibi, mesajları yazdırmak için $ (bilgi) veya $ (uyarı) kullanın. Gerçekten, inşa sırasında bir komut dosyası çalıştırmak bir değişkene olarak çıktılarını depolamak istiyorsanız Veya: Burada

ECHO_RESULT := $(shell ($(LOCAL_PATH)/echo_test.sh)) 

Eğer script yankı çıkışını görmez, bu değişkenin girer. RichQ en Cevap benim için çalışmıyor yana

8

$(info $(shell ($(LOCAL_PATH)/echo_test.sh)))'u deneyin, işe yarıyor.

0

Bunu kullanın:

LOCAL_PATH := $(call my-dir) 
include $(CLEAR_VARS) 
LOCAL_MODULE := libecho_test 
LOCAL_MODULE_TAGS := optional 
include $(BUILD_SHARED_LIBRARY) 

all: 
    echo hello 
+0

Tüm için komut çalıştırmak eklemek için gerçekten tehlikeli: – mafonya