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

ルールのアクションの一部として (つまり、タブでインデントされた行の 1 つとして、またはセミコロンに続くコマンドとして):

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

ファイルへの出力が必要な場合は、

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

上書きするのではなくファイルに追加する場合は、 >aを作成できます。>>

アップデート

「ルールのアクションの一部として (つまり、タブでインデントされた行の 1 つとして、またはセミコロンに続くコマンドとして)」とはどういう意味ですか?

回答: 次 のように @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 にコピーさせたくない特定のコマンドの前に置きます. 正式には、セミコロンのないバージョンは、シェルの個別の呼び出しを使用して、独自の個別の環境で複数の個別のコマンドを発行します; 一方、セミコロン付きのバージョンは、シェルを一度だけ呼び出します、単一の環境で、シェルに任せてコマンドを分離して実行します. これは意味がありますか? 読んだだけならそうではないかもしれません.私はそれを自分で書きましたが、試してみてください@示されているさまざまな場所で、すぐに理解できるはずです。@いずれにせよ大したことではありませんが、使用方法を理解していれば、Make の出力をきれいに保つために使用できます。)

于 2012-06-22T15:12:55.803 に答える