Минимальная перестройка проекта? - PullRequest
1 голос
/ 07 октября 2009

Я использую сторонний кроссплатформенный конструктор проектов, который использует различные компиляторы. Этот конструктор проектов всегда полностью перестраивает проект, и я пытаюсь реализовать механизм «умного перестроения».

Я думал о запуске препроцессора на каждом .cpp, проверяем результат и сравниваем его с CRC предыдущей сборки. Если они различаются, я отмечу .cpp для компиляции. Если нет, я буду использовать предыдущий объектный файл.

Достаточно ли безопасен этот метод? Вполне вероятно, что я получу тот же CRC, когда код / ​​заголовки будут изменены? Существует ли определенный алгоритм CRC, который может сделать его более безопасным?

Ответы [ 3 ]

1 голос
/ 07 октября 2009

Очевидная проверка, которую нужно выполнить сначала (потому что они не попадают на диск), это проверить, имеет ли .cpp тот же размер. Если нет, то нет смысла тратить время на вычисление CRC. Еще одна проверка для даты файла. Это не идеально, но, опять же, разницы, вероятно, достаточно для восстановления.

CRC - в основном правильный алгоритм. Он также улавливает изменения порядка, но не является криптографически сильным.

0 голосов
/ 08 октября 2009

Система сборки GNU " cons " генерирует подпись MD5 файлов компонентов и команд сборки для каждой цели и может затем решить, следует ли перестраивать цель. Мы использовали его у бывшего работодателя, и в сочетании с кешем сборки это значительно ускоряло построение больших исходных деревьев, особенно когда каждый разработчик работал над своей небольшой частью - однажды весь код был собран один раз кто-то , никто не должен был его перестраивать.

С другой стороны, я нашел синтаксис Perl для файлов управления сборкой слишком сложным и запутанным.

0 голосов
/ 07 октября 2009

Возможно, достаточно CRC-32, но для большей безопасности вы можете использовать SHA-1 или другую, более длинную версию этого семейства.

Отредактируйте после перечитывания вопроса: теоретически возможно, что измененный исходный код может привести к тому же CRC. С SHA эта возможность уже намного меньше (и, например, как только длина файла изменяется, SHA изменяется в любом случае). Есть статьи, которые тщательно разбираются в этом, если вам нужен такой фон.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...