The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Строю дерево каталогов make-ом. Строго последовательно"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Строю дерево каталогов make-ом. Строго последовательно"  
Сообщение от Makefile email on 02-Мрт-06, 17:56 
не получается: какие-то подкаталоги бывает появляются раньше.
я чтобы make не путать, делаю touch всему дереву ниже создаваемого файла/каталога:

${WORKDIR}${FILE}: ${WORKDIR}
      install myfile ${WORKDIR}/
      find ${WORKDIR}/ | while read $$NAME; do touch $$NAME; done

такой вот циклище каждому файлу.
а если не сделать, время модификации ${WORKDIR} становится моложе подкаталогов и сценарий пытается пересоздать уже созданное.

Можно было бы выстроить граф более строго и исключить независимые, но пересекающиеся каталогами ветки. Поставить их в строгую очередь, одну за другой. Но не хочется. Они ведь независимы! А т.к. все возможные пересечения отследить очень сложно, я и приписал такой TOUCH почти каждому файлу.

Вопрос гуру: правильно ли я делаю и не делается ли это более простыми средствами?

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "Строю дерево каталогов make-ом. Строго последовательно"  
Сообщение от jd (??) on 03-Мрт-06, 01:03 
>правильно ли я делаю и не делается ли это более
>простыми средствами?

А что, собственно, вы хотите сделать? В чём конкретно состоит задача?

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

2. "Строю дерево каталогов make-ом. Строго последовательно"  
Сообщение от Makefile email on 03-Мрт-06, 10:55 

>А что, собственно, вы хотите сделать? В чём конкретно состоит задача?

собираю свою (специализированную) версию дистрибутива RH из того, который у меня на диске.
создаю дерево каталогов и копирую туда нужные мне файлы, создаю сценарии.
потом упаковываю это на загрузочный CD.

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

можно написать сценарий так, чтобы он их пересоздавал без аварийного завершения, но тогда исчезает одно из главных ценных свойств make-а: не делать уже сделанное.

я не слишком многословен ;-)?

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

3. "Строю дерево каталогов make-ом. Строго последовательно"  
Сообщение от jd (??) on 05-Мрт-06, 01:06 
А в чём смысл зависимости файлов от времени изменения директорий, в которых они находятся?
Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

4. "Строю дерево каталогов make-ом. Строго последовательно"  
Сообщение от echo email(??) on 05-Мрт-06, 22:58 
>А в чём смысл зависимости файлов от времени изменения директорий, в которых
>они находятся?

чтобы создать в каталоге файлы (подкаталоги), нужно создать сначала каталог

КАТАЛОГ:
     mkdir КАТАЛОГ

у подкаталогов показываем зависимость, т.к. если КАТАЛОГ не будет, сценарий завершится с ошибкой.

ПОДКАТАЛОГ_1: КАТАЛОГ
     mkdir ПОДКАТАЛОГ1

ПОДКАТАЛОГ_2: КАТАЛОГ
     mkdir ПОДКАТАЛОГ_2

Получается две ветки подкаталогов, которые пересекаются в КАТАЛОГЕ.

Теперь, если мы создали ПОДКАТАЛОГ_1 (в нём сценарий сгенерил кучу файлов) мы балдеем! нам клёво!

Но если мы ПОСЛЕ этого создадим ПОДКАТАЛОГ_2, время модификации КАТАЛОГ станет моложе, чем вся ветка ПОДКАТАЛОГ_1. В результате make пытается всю эту ветку пересоздать, если на неё показать. Чего нафиг не надо.

Понятно?
В общем, я думаю особо простого решения тут нет.
Нужно выделить все точки пересечения в отдельные цели и показывать зависимость подкаталогов от них. Тогда можно будет touch делать только раз в конце создания в каталоге всех файлов. Или применять уже найденное решение, не такое уж оно и плохое.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

5. "Строю дерево каталогов make-ом. Строго последовательно"  
Сообщение от jd (??) on 06-Мрт-06, 19:59 
>В общем, я думаю особо простого решения тут нет.
>Нужно выделить все точки пересечения в отдельные цели и показывать зависимость подкаталогов
>от них. Тогда можно будет touch делать только раз в конце
>создания в каталоге всех файлов. Или применять уже найденное решение, не
>такое уж оно и плохое.

Можно получить список всех необходимых директорий, а затем создать их все с помощью mkdir -p.
Допустим есть файл list, в котором содержится список всего, что нужно скопировать в $DESTDIR. Делаем:

(while read i; do echo `dirname $i`; done) < list | sort | uniq > dirlist
(while read i; do mkdir -p $DESTDIR$i; done) < dirlist
(while read i; do cp $i $DESTDIR$i; done) < list

и никаких заморочек с Makefile не нужно. list - что-то вроде:

/bin/sh
/bin/cp
/bin/ls
/usr/bin/vi
...

Если в именах есть пробелы, нужно сделать соответствующие дополнительные телодвижения; если список изначально отсортирован (хотя бы по директориям), sort не нужен; ещё было бы неплохо позаботиться о корректных правах/владельцах директорий/файлов и т.д. Словом, дальше можно проявить полёт фантазии...

А ещё можно поискать - наверняка этой проблемой уже озаботилась куча народу и есть готовые проверенные решения.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру