Добро пожаловать, Гость. Пожалуйста авторизуйтесь здесь.
FGHIGate на GaNJa NeTWoRK ST@Ti0N - Просмотр сообщения в эхоконференции RU.UNIX.BSD
Введите FGHI ссылку:


Присутствуют сообщения из эхоконференции RU.UNIX.BSD с датами от 18 Jan 11 22:51:00 до 16 Sep 24 17:28:15, всего сообщений: 10763
Ответить на сообщение К списку сообщений Предыдущее сообщение Следующее сообщение
= Сообщение: 7420 из 10763 ===================================== RU.UNIX.BSD =
От   : Victor Sudakov                   2:5005/49          14 May 18 09:36:22
Кому : Eugene Grosbein                                     14 May 18 09:36:22
Тема : Makefile
FGHI : area://RU.UNIX.BSD?msgid=2:5005/49+5af8f833
На   : area://RU.UNIX.BSD?msgid=grosbein.net+6f307467
= Кодировка сообщения определена как: CP866 ==================================
Ответ: area://RU.UNIX.BSD?msgid=grosbein.net+c67a81a7
==============================================================================
Dear Eugene,

11 May 18 20:37, you wrote to me:

VS>> (это так объясняют в
VS>> https://www.cmcrossroads.com/article/rules-multiple-outputs-gnu-m
VS>> ake) т.е. от лишней траты вычислительных ресурсов до возможного
VS>> повреждения файлов, если в них станут писать одновременно. В
VS>> реальности ведь там не touch).

EG> Так что там в реальности-то? Если это нечто пишет в файл, не создавая
EG> собственных блокировок против параллельной записи другой своей копией,
EG> то эта проблема вообще не имеет отношения к make и решается
EG> стандартно, приписыванием lockf к вызову этого нечта.

Приписывание lockf IMHO приведёт только к тому, что вторая ветка make дождется выполнения первого экземпляра нечта и таки запустит второй экземпляр.

VS>> Вызов еще одного make изнутри Makefile мне в голову не приходил,
VS>> это свежо. Hо "bar: foo" конечно быть не должно, это не отражает
VS>> реальной зависимости. Если например прога, обрабатывающая source,
VS>> решит что foo в этот раз пересоздавать не надо, случится
VS>> что-нибудь странное.

EG> foo bar: fileflag

EG> fileflag: sources
EG>         lockf /tmp/touch.${.MAKE.PID} touch foo bar && echo -n
EG> > fileflag

EG> clean:
EG>         rm -f fileflag ...

Это некая вариация на тему "Dummy targets" из https://www.cmcrossroads.com/article/rules-multiple-outputs-gnu-make

"We can work around this by changing the generate_parser rule so that it also creates a file on disk named "generate_parser"; then on an incremental build, make will see that the file "generate_parser" is newer than parser.i and will not rebuild.  But this is messy:  we'll have an extra file hanging around that serves no purpose other than to work around a *deficiency* *in* *the* *build* *tool*, and we need to remember to manage that file along with the other outputs of the build.  It should be deleted by "make clean", for example.  And if somebody does something like "touch generate_output" in between builds, that make may not be able to correctly detect that parser.c and parser.h must be rebuilt.  As with the previous solution, if you only do from-scratch full builds, this solution will work fine, but with incrementals you need to be careful."


Victor Sudakov, VAS4-RIPE, VAS47-RIPN
--- GoldED+/BSD 1.1.5-b20160322-b20160322
* Origin: Ulthar (2:5005/49)

К главной странице гейта
Powered by NoSFeRaTU`s FGHIGate
Открытие страницы: 0.119223 секунды