1

我正在尝试编辑一个 Android Makefile,希望它能够打印出它创建的一个 ZIP 文件的目录(路径)位置。理想情况下,由于构建过程很长并且做了很多事情,我希望它打印出 ZIP 文件的路径到另一个目录中的文本文件,我以后可以访问:

伪代码思路:

# print the desired pathway to output file
print(getDirectoryOf(variable-name.zip)) > ~/Desktop/location_of_file.txt

我想在其中插入这段新代码的 Makefile 片段如下所示。我有兴趣找到$(name).zip的目录(即我要查找的特定文件):

# -----------------------------------------------------------------
# A zip of the directories that map to the target filesystem.
# This zip can be used to create an OTA package or filesystem image
# as a post-build step.
#
name := $(TARGET_PRODUCT)
ifeq ($(TARGET_BUILD_TYPE),debug)
  name := $(name)_debug
endif
name := $(name)-target_files-$(FILE_NAME_TAG)

intermediates := $(call intermediates-dir-for,PACKAGING,target_files)
BUILT_TARGET_FILES_PACKAGE := $(intermediates)/$(name).zip
$(BUILT_TARGET_FILES_PACKAGE): intermediates := $(intermediates)
$(BUILT_TARGET_FILES_PACKAGE): \
        zip_root := $(intermediates)/$(name)

# $(1): Directory to copy
# $(2): Location to copy it to
# The "ls -A" is to prevent "acp s/* d" from failing if s is empty.
define package_files-copy-root
  if [ -d "$(strip $(1))" -a "$$(ls -A $(1))" ]; then \
    mkdir -p $(2) && \
    $(ACP) -rd $(strip $(1))/* $(2); \
  fi
endef
4

1 回答 1

2

作为规则操作的一部分(即,作为由制表符缩进的行之一,或作为分号后面的命令):

@echo $(dir $(variable-name).zip)

如果需要输出到文件,

@echo $(dir $(variable-name).zip) >~/Desktop/location_of_file.txt

如果您更喜欢附加到文件而不是覆盖,您可以制作>a 。>>

更新

“作为规则操作的一部分(即,作为制表符缩进的行之一,或作为分号后面的命令)”是什么意思?

答: 这意味着你可以像这样@echo:

file-to-be-built: dependencies
        some-command
        @echo foo
        another-command

或者像这样:

file-to-be-built: dependencies
        @some-command; \
        echo foo; \
        another-command

(注意 的位置@)。或者像这样:

file-to-be-built: dependencies; @some-command; echo foo; another-command

但不是这样:

@echo foo
file-to-be-built: dependencies
        some-command
        another-command

(这里还有另一个括号语句,如果你愿意,你可以忽略它:@你可能知道,它禁止 Make 将命令本身复制到标准输出。当然,你可以省略它,但如果你包含它,那么你必须把它放在你不想让 Make 复制的特定命令之前。形式上,没有分号的版本在它们自己的独立环境中发出多个单独的命令,使用 shell 的单独调用;而带有分号的版本只调用 shell 一次, 使用单个环境, 并将其留给 shell 来分离和执行命令。这有意义吗?也许不是,如果你只是阅读它——我也无法理解这种纠结的措辞,即使我自己写的 - 但请尝试使用@在指示的各个位置,它应该很快开始对您有意义。在任何情况下@都没什么大不了的,但如果你了解如何使用它,它可以用来保持 Make 的输出干净。)

于 2012-06-22T15:12:55.803 回答