Каков правильный синтаксис для получения Makefile для печати выходного каталога одного из его выходных zip-файлов?

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
  • 0
    Это не очень хорошее место для нового кода. Вы должны найти правило, которое строит $(name).zip , а не только правила, которые устанавливают переменные для него.
  • 0
    Понятно, спасибо Бета.
Теги:
makefile

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

(Вот еще одно выражение в скобках, которое вы можете игнорировать, если хотите: @, как вы, возможно, знаете, подавляет. Сделать копирование самой команды на стандартный вывод. Конечно, вы можете ее опустить, но если вы включите ее, то вы должен помещать его перед конкретной командой, которую вы не хотите, чтобы скопировать. Формально версии без точек с запятой выдают несколько отдельных команд в их собственных, отдельных средах, используя отдельные вызовы оболочки, тогда как версии с точками с запятой только вызывают оболочку один раз, с одной средой, и оставить его оболочке для разделения и выполнения команд. Имеет ли это смысл? Может быть, нет, если вы просто прочитаете это - я не могу даже представить себе такое запутанное словосочетание хотя я сам написал это, но попробуйте это с помощью @ в указанных разных местах, и это должно скоро начать иметь смысл для вас. @ не имеет большого значения в любом случае, но он должен использовать для сохранения вывода чистым, если вы понимаете, как его использовать.)

  • 0
    Спасибо. Тем не менее, эта команда "echo", я предполагаю, печатает эту информацию на терминал / консоль, правильно? Как бы вы перенаправили этот оператор echo, например, в выходной текстовый файл?
  • 0
    Справедливо. Я изменил свой ответ соответственно. Удачи.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню