Я пытаюсь отредактировать файл 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
Как часть действия правила (то есть, как одна из строк с отступом на вкладке или как команда, которая следует за точкой с запятой):
@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
(Вот еще одно выражение в скобках, которое вы можете игнорировать, если хотите: @
, как вы, возможно, знаете, подавляет. Сделать копирование самой команды на стандартный вывод. Конечно, вы можете ее опустить, но если вы включите ее, то вы должен помещать его перед конкретной командой, которую вы не хотите, чтобы скопировать. Формально версии без точек с запятой выдают несколько отдельных команд в их собственных, отдельных средах, используя отдельные вызовы оболочки, тогда как версии с точками с запятой только вызывают оболочку один раз, с одной средой, и оставить его оболочке для разделения и выполнения команд. Имеет ли это смысл? Может быть, нет, если вы просто прочитаете это - я не могу даже представить себе такое запутанное словосочетание хотя я сам написал это, но попробуйте это с помощью @
в указанных разных местах, и это должно скоро начать иметь смысл для вас. @
не имеет большого значения в любом случае, но он должен использовать для сохранения вывода чистым, если вы понимаете, как его использовать.)
$(name).zip
, а не только правила, которые устанавливают переменные для него.