Я пытаюсь собрать путь к файлу и временную метку для каждого файла под определенный каталог (который передается в качестве аргумента) в Makefileзамена строки с помощью xargs
Таким образом, это выглядит следующим образом.
TIMESTAMP_LOG := timestamp.log
TARGET_ROOT := ../../out/root
define collect-timestamp
$(shell find $(1) | xargs -lfn sh -c 'echo -n fn"," >> $(TIMESTAMP_LOG); stat -c %Y fn >> $(TIMESTAMP_LOG)')
endef
all:
$(call collect-timestamp, $(TARGET_ROOT))
Если я запускаю это, я бы получить полный путь к файлу и метку времени, как показано ниже ех) ../../out/root/bin/ls,133030303
, но я хочу, чтобы получить избавиться от "../../out/root" в пути к файлу. (передавая как аргумент, если это возможно)
Я думал, что смогу сделать это с помощью сценария sed или оболочки (см. ниже), но, видимо, я застрял. Я пробовал:
$(shell find $(1) | xargs -Ifn sh -c 'echo -n ${fn##$(1)}"," >> $(TIMESTAMP_LOG); stat -c %Y fn >> $(TIMESTAMP_LOG)')
$(shell find $(1) | xargs -Ifn sh -c 'sed 's/fn//g' >> $(TIMESTAMP_LOG); stat -c %Y fn >> $(TIMESTAMP_LOG)')
Можете ли вы показать нам, что вы пробовали? –
$ (shell find $ (1) | xargs -Ifn sh -c 'echo -n $ {fn ## $ (1)} "," >> $ (TIMESTAMP_LOG); stat -c% Y fn >> $ (TIMESTAMP_LOG) ') – Todd
$ (shell find $ (1) | xargs -Ifn sh -c' sed 's/fn // g' >> $ (TIMESTAMP_LOG); stat -c% Y fn >> $ (TIMESTAMP_LOG) ') Я пробовал выше и пару больше, но я не думаю, что они были правы – Todd