在构建过程中,我得到了这个错误
Android.mk:145:*配方在第一个目标之前开始。停止播放。
我的编译器应该是一个来自android工具链的gcc。
这是一个有趣的食谱
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) $@ ing ... //this is line 145
$(hide) echo -e \\t\\t\\t\\b\\b\\b\\bLOG: $(LOG_DIR)$(MTK_PROJECT_NAME)_$@.log
$(hide) rm -f $(LOG_DIR)$(MTK_PROJECT_NAME)_$@.log $(LOG_DIR)$(MTK_PROJECT_NAME)_$@.log_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 $@.
endif
else
$(hide) echo Not support $@.
endif
droidcore: trustzone
endif
发布于 2016-05-19 02:39:26
我发现问题是Gnu的版本。在这个官方页面,人们明确表示,安卓构建系统参考版的版本为3.81-3.82。我安装了一个以前的版本,现在makefile不提供任何错误,不需要任何修补程序。
发布于 2016-05-18 09:35:01
我认为这是GNU make中的一个bug。它在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) $@ ing ... //this is line 145
$(hide) echo -e \\t\\t\\t\\b\\b\\b\\bLOG: $(LOG_DIR)$(MTK_PROJECT_NAME)_$@.log
$(hide) rm -f $(LOG_DIR)$(MTK_PROJECT_NAME)_$@.log $(LOG_DIR)$(MTK_PROJECT_NAME)_$@.log_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 $@.
endif
else
$(hide) echo Not support $@.
endif
但是,请在Savannah跟踪器中报告一个bug: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
显然,当不采用else
路径时,else
中的变量赋值正在破坏事物。
https://stackoverflow.com/questions/37298174
复制