我有一个简单的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’bash脚本.在脚本的内容是的情况下
#!/bin/bash echo 'echo is working' >&2
要么
#!/bin/bash echo 'echo is working' >/dev/null
一切都好.
bash脚本出现问题
#!/bin/bash echo 'echo is working'
要么
#!/bin/bash echo 'echo is working' >&1
然后返回的错误是
Android.mk:4: *** missing separator. Stop.
Android NDK 7以及在Android Ice Cream Sandwich 4.0.3的构建过程中包含此模块时都会发生这种情况.
我真的无法理解标准输出和Android构建系统的处理方式.有没有人有解释?
Android NDK构建系统实际上是
GNU Make.Android.mk文件中的所有代码都必须是有效的.
当您运行$(shell)并且不将值存储在变量中时,就好像您将脚本的标准输出复制到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)
..这是无效的make语法.在脚本中重定向到>& 2是有效的,因为输出转到错误输出,然后显示在控制台上.
正如Vishrut所提到的,使用$(info)或$(警告)来打印消息.或者,如果您确实希望在构建期间运行脚本,请将其输出存储在变量中:
ECHO_RESULT := $(shell ($(LOCAL_PATH)/echo_test.sh))
在这里你不会看到脚本的echo输出,它会进入变量.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。