В моей системе сборки некоторые файлы заголовков создаются автоматически. Их поколение занимает некоторое время. Генератор сначала создает пустой файл в файловой системе, затем записывает содержимое - поэтому есть небольшое временное окно, в течение которого файл существует и пуст.Нельзя полагаться на атомарное создание зависимостей с помощью GNU Make?
Это приводит к ошибкам параллельной сборки: процесс требует заголовка file.h
и запускает команду генерации. Процесс B нуждается в том же файле; если он, похоже, начинает компиляцию в течение указанного временного окна, компилятор видит зависимость на месте, получает пустой заголовок и прерывает ошибку компиляции.
Каков правильный способ решения этой проблемы? Я ищу решение для GNU Make, но общие соображения также высоко ценятся.
Не могли бы вы сгенерировать файл, дающий ему другое имя, а затем переименуйте его, когда он будет полностью сгенерирован. – 4386427
Инструмент сломан. Он не должен этого делать. Но параллельный make не должен запускать задание, в котором перечисляется необходимое условие для файла, пока не будет создано правило, которое генерирует этот файл. У вас есть правильное правило и предпосылки? –