эхо для одной цели - PullRequest
       8

эхо для одной цели

0 голосов
/ 05 февраля 2012

У меня есть make-файл, который ищет файлы .txt в каталоге и для каждого файла выводит его имя.

pchs := $(wildcard $(OUTPUT:%=%/*.txt))
txt:  $(pchs)
%.txt:
    echo $@

Но когда я запускаю его, утилита make возвращает мне, что ничего не поделаешь для txt. Почему?

EDIT1:

После некоторых ответов я понимаю, что я должен сделать с моим make-файлом. Теперь это выглядит так:

pchs := $(wildcard $(OUTPUT:%=%/*.txt))

.PHONY : $(pchs)

txt:  $(pchs)

%.txt:
    @echo pch is '$<'

Но .PHONY не помогает мне, результат создания такой же.

Ответы [ 4 ]

1 голос
/ 05 февраля 2012

Почему make говорит, что делать нечего?Потому что make рассчитывает зависимости целей, как правило, файл целей.И цель "txt" не создает файл.

.PHONY для целей, которые не производят файл, как чистая цель.

Это должно работать:

pchs: = $ (подстановочный знак $ (ВЫХОД:% =% / *. Txt))

.PHONY: txt

текст: $ (шт.)echo $ @

Но, поскольку вы только повторяете имя файла, я предполагаю, что вы постобрабатываете этот вывод.Может быть, вы могли бы сформулировать эту постобработку как правило в make-файле?

0 голосов
/ 05 февраля 2012

Я бы использовал Bash для определения файлов * .txt вместо Make:

txt:
        ls | grep -F '.txt'

Вы также можете использовать это как шаблон для создания более общей цели, которая повторяет любые файлы, существующие вкаталог с определенным расширением.

Возможно, вы хотите, чтобы целью была PHONY, поскольку она не создает файл.

0 голосов
/ 05 февраля 2012

Это потому, что каждый .txt файл, который вы перечислили в $(pchs), обновлен, и Make решает не предпринимать никаких действий.Добавьте их к .PHONY target, чтобы принудительно восстанавливать их при каждом запуске. Make:

.PHONY : $(pchs)

UPD.

Также убедитесь, что список $(pchs) не пустой, это можно сделатьследующим образом:

txt : $(pchs)
    @echo pchs is '$^'
0 голосов
/ 05 февраля 2012

Потому что make-файлы определяют, что вы хотите собрать. А файлы .txt уже существуют, поэтому делать нечего.

Чтобы решить эту проблему, существует ряд возможностей, но вам следует заглянуть в запись .PHONY, если вы используете хотя бы gnu-make.

Вы можете создавать поддельные вещи из текстовых записей и помечать их как фальшивые. Но ... это может быть проще сделать:

pchs := $(wildcard $(OUTPUT:%=%/*.txt))
txt:
    for i in $(pchs) ; do echo $$i ; done
...