Я управляю для работы сложным проектом C++, определения сборки которого написаны в CMake
, а сама сборка получается путем вызова make
. Исходное дерево состоит из множества модулей и хорошо распараллеливается.
Линейная сборка всегда успешна, а параллельная — в большинстве случаев. Когда во время такой сборки возникает проблема с зависимостями, я обычно иду и исправляю ее, но я хотел бы тестировать зависимости программно, а не исправлять проблемы по мере их возникновения.
Идеальным решением было бы пройтись по всем зависимостям в CMake
и исправить их, но на практике это не всегда возможно, потому что мы активно используем пользовательские макросы для каких-то зависимостей, специфичных для нашего исходного дерева (я не могу зайти в подробности, извините). Итак, я думал решить проблему по-другому (и, возможно, эффективно), стараясь максимально переиспользовать стандартные инструменты.
Моя первая мысль заключалась в том, чтобы внедрить какую-то «случайность» в планирование заданий
Make
, чтобы сборочная машина могла бесконечно пытаться использовать разные пути компиляции, перестраивая дерево, пока не произойдет сбой. Другой вопрос (здесь) Однако указал, что эта функция недоступна вMake
.Поэтому я попробовал другое решение: я создал сценарий-оболочку вокруг
g++
, который спит в течение$RANDOM
секунд, чтобы внести некоторый шум в планировщик заданийMake
. Недостатком этого решения является, конечно же, увеличенное время компиляции.
Это частичное решение, однако, имеет фундаментальный недостаток: если проблема найдена, это доказательство отсутствия зависимости, но, если нет ошибки создан, мы не можем доказать, что все зависимости верны.
Что вы думаете? Как я мог достичь своей цели? Я бы предпочел решения, которые повторно используют стандартные инструменты и могут быть применены к широкой аудитории.
Спасибо.
make
в сценарий, который вызываетmake
до тех пор, пока успех не будет считаться однократным? - person arrowd   schedule 08.10.2012