
GNU Make умеет специально ломать привычный порядок сборки, чтобы находить ошибки в зависимостях Makefile! Бывает, что make -j работает нормально, а затем сборка случайно падает на CI или новой машине. Частая причина — одна цель неявно рассчитывает, что другая успеет выполниться раньше, хотя эта зависимость нигде не объявлена. В GNU Make 4.4 для поиска таких проблем появился --shuffle: make -j8 --shuffle Make сохраняет зависимости между целями, но намеренно меняет допустимый порядок их выполнения. Если Makefile случайно зависит от привычной последовательности, вероятность воспроизвести проблему резко возрастает. Полезно прогнать сборку несколько раз: for i in {1..20}; do make clean make -j8 --shuffle || break done Если сборка упала, Make сообщает seed перемешивания. Его можно передать повторно и воспроизвести тот же порядок: make -j8 --shuffle=123456789 Интересно, что --shuffle полезен даже без параллельной сборки: make -j1 --shuffle Так можно обнаружить зависимости от порядка выполнения отдельно от настоящих проблем конкурентного выполнения. 🔥 make --shuffle превращает порядок сборки в fuzz-тест: отличный способ найти отсутствующие зависимости в Makefile до того, как они проявятся случайным падением на CI. 🚪 Linux Ready | #совет

