2012-03-26 23 views
6

मैं एक साधारण Android.mk फ़ाइल है:शैल स्क्रिप्ट कॉल और लापता विभाजक त्रुटि

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) 

दिलचस्प बात यह है कि यह करता है 'echo_test.sh' बैश स्क्रिप्ट कॉल करने के लिए है । मामले में जब स्क्रिप्ट की सामग्री हैं

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

या

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

सब कुछ ठीक है।

कोई बात बिगड़ जाए जब बैश स्क्रिप्ट

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

या

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

है तो फिर से त्रुटि आई

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

यह एंड्रॉयड NDK 7 के साथ दोनों होता है और जब आप शामिल एंड्रॉइड आइसक्रीम सैंडविच 4.0.3 के निर्माण के दौरान यह मॉड्यूल।

मैं वास्तव में समझ नहीं पा रहा हूं कि मानक आउटपुट और एंड्रॉइड बिल्ड सिस्टम के साथ क्या सौदा है। क्या किसी के पास स्पष्टीकरण है?

उत्तर

10

एंड्रॉइड एनडीके बिल्ड सिस्टम वास्तव में GNU Make है। एंड्रॉइड.एमके फ़ाइल में सभी कोड वैध make होना चाहिए।

जब आप $ (खोल) चलाते हैं और मान को चर में संग्रहीत नहीं करते हैं, तो ऐसा लगता है कि आपने स्क्रिप्ट के मानक आउटपुट को अपने Android.mk फ़ाइल में कॉपी किया है। यानी ऐसा लगता है कि आपकी फ़ाइल में निम्नलिखित शामिल हैं:

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

echo is working 

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

.. जो वैध नहीं है वाक्यविन्यास। आपकी स्क्रिप्ट में & 2 पर रीडायरेक्ट करना क्योंकि आउटपुट त्रुटि आउटपुट पर जाता है और फिर कंसोल पर दिखाया जाता है।

विष्णु का उल्लेख है, संदेश प्रिंट करने के लिए $ (जानकारी) या $ (चेतावनी) का उपयोग करें। या यदि आप वास्तव में, निर्माण के दौरान एक स्क्रिप्ट चलाने एक चर में इसके उत्पादन संग्रहीत करना चाहते हैं:

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

यहाँ आप स्क्रिप्ट की गूंज उत्पादन नहीं देखेंगे, यह चर में चला जाता है।

8

$(info $(shell ($(LOCAL_PATH)/echo_test.sh))) आज़माएं, यह काम करता है।

0

के बाद से richq के जवाब मेरे लिए काम नहीं करता है मैं इस का उपयोग करें:

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

all: 
    echo hello 
+0

यह सब के लिए अपनी स्क्रिप्ट रन जोड़ने के लिए वास्तव में खतरनाक है: – mafonya

संबंधित मुद्दे