Я пытаюсь заставить параллельную работу работать на нашем сервере сборки. Здесь я сталкиваюсь с очень частой проблемой, когда два случая, когда make пытается создать две разные цели, скажем, A и B, почти одновременно пытаются создать цель, которая требуется обоим, скажем C.
Поскольку оба экземпляра пытаются собрать C вместе в разных экземплярах, C make завершается неудачей для любого из них, поскольку для создания одного из C необходимо несколько файлов переместить сюда и туда, и любой из этих экземпляров в конечном итоге перемещает или удаляет уже созданный файл.
Существует ли общая конструкция, которую я могу использовать для предотвращения повторного входа в make-файл, если цель уже выполняется?
Обновление:
Хорошо, позвольте мне сказать это так:
Мое заявление требует присутствия A.lo и B.lo. Эти A.lo и B.lo являются библиотеками, которые также связываются с C.lo.
Так что правила выглядят как
app.d: A.lo B.lo (другие lo)
(сделать ссылку)
В другом каталоге произнесите A (в котором будет A.lo):
A.lo: C.lo (другие .o s и .lo s)
(сделать ссылку)
В каком-то другом каталоге произнесите B (в котором будет B.lo):
B.lo: C.lo (другие .o s и .lo s)
(сделать ссылку)
Таким образом, при создании app.d вилы делаются с двумя параллельными марками для целей A.lo и B.lo.
При входе в каталоги A и B производят раздвоение еще двух потоков для целевого C.lo независимо, и иногда оба они одновременно связывают C.lo, что приводит к сбою одного из них с некоторыми странными ошибками, такими как файл не распознается ( поскольку он может быть записан другим экземпляром компоновщика)
Как мне решить эту проблему? Невозможно создать A.lo и B.lo без C.lo, связанного с ними.