2016-05-18 36 views
0

は私がAndroidのメイクファイルのエラー:レシピは、最初のターゲットの前に、ビルド時に

Android.mk:145: *** recipe commences before first target. Stop.

私のコンパイラは、Androidツールチェーンからのgccでなければなりません。このエラーを取得開始します。

これは、私は、これは作るGNUのバグだと思う面白いレシピ

ifneq ($(MTK_TEE_SUPPORT),yes) 
trustzone: 
else 
ifeq ($(MTK_IN_HOUSE_TEE_SUPPORT),yes) 
# export for build.sh 
#include $(MTK_PATH_CUSTOM)/trustzone/custom.mk 
#export TEE_DRAM_SIZE:=$(MEMSIZE) 
#export MTEE_CUSTOM_CFG_DIR:=$(MTK_PATH_CUSTOM)/trustzone 
export HOST_OS 
TRUST_TEE_IMAGES := $(OUT_DIR)/target/product/$(MTK_PROJECT_NAME)/trustzone/bin/tz.img 
trustzone: 
else # for TRUSTONIC_TEE_SUPPORT 
trustzone: mcDriverDaemon 
endif 
endif 
ifeq ($(TRUSTZONE_PARTITION),yes) 
    ifneq ($(wildcard $(TRUST_TEE_WD)/build.sh),) 
    $(hide) echo $(SHOWTIME) [email protected] ing ...   //this is line 145 
    $(hide) echo -e \\t\\t\\t\\b\\b\\b\\bLOG: $(LOG_DIR)$(MTK_PROJECT_NAME)[email protected] 
    $(hide) rm -f $(LOG_DIR)$(MTK_PROJECT_NAME)[email protected] $(LOG_DIR)$(MTK_PROJECT_NAME)[email protected]_err 
    $(hide) $(SHELL) $(TZ_BUILD_SCRIPT) $(MTK_PROJECT_NAME) $(DEAL_STDOUT) 
    $(hide) cp -f $(TRUST_TEE_IMAGES) $(LOG_DIR)/$(MTK_PROJECT_NAME)/ 
    $(hide) mkdir -p $(LOG_DIR)/$(MTK_PROJECT_NAME)/system/etc/ 
    $(hide) cp -f $(TRUST_TEE_IMAGES) $(LOG_DIR)/$(MTK_PROJECT_NAME)/system/etc/trustzone.bin 
    else 
    $(hide) echo Not find $(TRUST_TEE_WD)/build.sh, skip [email protected] 
    endif 
else 
    $(hide) echo Not support [email protected] 
endif 

droidcore: trustzone 

endif 
+0

「trustzone:」行の上にある条件文が間違っている可能性があります。 #145はどれですか? '$(hide)echo $(SHOWTIME)'で始まる行は? –

+0

makefileの初期の行を追加して質問を編集しました。 145行目はすでにI'vaにコメントがついているものです。明らかにそのコメントは実際のコードには存在しません。 – 4javier

+0

別の詳細を追加します:すべての$(hide)文の前のスペースはタブで、単純なスペースで置き換えようとしましたが、その時点でエラーが変更されました _targetパターンに '%'が含まれていません。 Stop._ 実際、そのようなコマンドは、私にはどのルールにも属していないようです。 – 4javier

答えて

0

問題はGnu Makeバージョンであることがわかりました。 this official page には、Androidビルドシステムリファレンスのバージョンが3.81-3.82であることが明確に記載されています。私はこれらの以前のバージョンをインストールしましたが、makefileはパッチを必要とせずにエラーを出さないようになりました。

1

です。 ifeq/endifのためにルールが終了する前に終了しています。この特定の例の場合、あなたはこのように、より簡単に、それを書き換えることができます:

PREREQ = 

ifeq ($(MTK_TEE_SUPPORT),yes) 
ifeq ($(MTK_IN_HOUSE_TEE_SUPPORT),yes) 
# export for build.sh 
#include $(MTK_PATH_CUSTOM)/trustzone/custom.mk 
#export TEE_DRAM_SIZE:=$(MEMSIZE) 
#export MTEE_CUSTOM_CFG_DIR:=$(MTK_PATH_CUSTOM)/trustzone 
export HOST_OS 
TRUST_TEE_IMAGES := $(OUT_DIR)/target/product/$(MTK_PROJECT_NAME)/trustzone/bin/tz.img 

else # for TRUSTONIC_TEE_SUPPORT 
PREREQ = mcDriverDaemon 
endif 
endif 
trustzone: $(PREREQ) 
ifeq ($(TRUSTZONE_PARTITION),yes) 
    ifneq ($(wildcard $(TRUST_TEE_WD)/build.sh),) 
     $(hide) echo $(SHOWTIME) [email protected] ing ...   //this is line 145 
     $(hide) echo -e \\t\\t\\t\\b\\b\\b\\bLOG: $(LOG_DIR)$(MTK_PROJECT_NAME)[email protected] 
     $(hide) rm -f $(LOG_DIR)$(MTK_PROJECT_NAME)[email protected] $(LOG_DIR)$(MTK_PROJECT_NAME)[email protected]_err 
     $(hide) $(SHELL) $(TZ_BUILD_SCRIPT) $(MTK_PROJECT_NAME) $(DEAL_STDOUT) 
     $(hide) cp -f $(TRUST_TEE_IMAGES) $(LOG_DIR)/$(MTK_PROJECT_NAME)/ 
     $(hide) mkdir -p $(LOG_DIR)/$(MTK_PROJECT_NAME)/system/etc/ 
     $(hide) cp -f $(TRUST_TEE_IMAGES) $(LOG_DIR)/$(MTK_PROJECT_NAME)/system/etc/trustzone.bin 
    else 
     $(hide) echo Not find $(TRUST_TEE_WD)/build.sh, skip [email protected] 
    endif 
else 
     $(hide) echo Not support [email protected] 
endif 

しかしサバンナのバグトラッカーに、この上のバグを報告してください:https://savannah.gnu.org/bugs/?func=additem&group=make

はここで、最小限の再生の場合です:

ifneq ($(FOO),yes) 
foobar: 
else 
BAR = bar 
foobar: 
endif 
     @echo one 

実行する場合:

$ make 
Makefile:7: *** recipe commences before first target. Stop. 

$ make FOO=yes 
one 

明らかに変数assig elseの中には、elseのパスが取られていないときに問題が発生しています。

+0

このように、この変数代入 'PREREQ = mcDriverDaemon'は同じ場合には含まれませんか? – 4javier

+0

いいえ、ターゲット 'trustzone'は、' ifeq'の各脚の中で複数回定義されるのではなく、一度だけ定義されるため、 'ifeq'を外します。 – MadScientist

+0

あなたの変更で_Android.mk:146が得られました:***ターゲットパターンに '%'が含まれていません。 Stop._ 私のバージョンのmakeはGnu Make 4.1です。 – 4javier

関連する問題