2013-06-07 13 views
0

Я не слишком хорошо знаком с make-файлами, и руководство смущает меня до конца. У меня есть ситуация, когда мне нужно обернуть текст вокруг каждого файла в каталоге и поместить его в файл.Как я могу обернуть строку вокруг каждого файла, плюс включить имя файла, с make?

В основном я начинаю с этим:

file1.exp 
file2.exp 
... 

И нужно преобразовать каждый файл в каталоге, как это:

"string1" [fileX's filename] "string2" [fileX's contents] "string3" > fileX.tmp 

Как это может быть сделано с помощью Makefile? Или мне нужно сделать другой маршрут, усложняя мое приложение другим методом сборки?

На боковой ноте, если вы можете порекомендовать какие-либо учебники, которые с меньшей вероятностью оставят меня в замешательстве, я был бы признателен.

ответ

0

Вы можете сделать что-то вроде:

all: fileX.tmp fileY.tmp 

%.tmp : % 
     echo "string1 $< string2 `cat $<` string3" > [email protected] 

это потерпит неудачу, если ваши файлы имеют много контента: это не совсем ясно из ваших вопросов, какие параметры и требования. Все это должно появляться в одной строке? Несколько строк? Я только что выполнил то, что вы просили выше.

+0

Вместо того, чтобы пытаться упаковать это в одно действие, почему бы просто не использовать несколько действий в рецепте? например '% .tmp:% .exp ... echo" string1 "> $ @; echo $ < >> $ @; echo "string2" >> $ @; cat $ < >> $ @; echo "string3" >> $ @; '(Вставьте -n, ​​если необходимо). – laindir

+0

Ну, вот почему я сказал, что требования не были четко определены. Разница между моим ответом и вашим заключается в том, что ваш добавит новые строки после каждого элемента «строка1», «$ <» и т. Д., А мой не будет. Все, что нам нужно сделать, - это пример выше, где нет новых строк, так вот как я реализовал свой пример. – MadScientist

+0

Хорошая точка. Кроме того, ваше решение имеет то преимущество, что оно порождает только 2-3 дополнительных процесса (sh, эхо, вероятно, встроенная оболочка и cat) вместо 2-10 (в зависимости от выхода из новой строки). Однако большинство реализаций эха имеют переключатель для подавления новой строки, а не расширение команды в содержимом '$ <' защищает от слишком длинной командной строки. – laindir

Смежные вопросы