Чи існує загальне правило, коли слід використовувати «очистити», а не просто «зробити»?


11

Я зараз пишу програму з декількома файлами, і, мабуть, запускаю лише "зробити" (як інтуїтивно можна вважати, що потрібно робити в більшості ситуацій) з якихось причин причина моєї програми виходить з ладу. Я думаю, я можу надати більш детальну інформацію про проблему, але найважливіше те, що вона працює під час використання "очистити". Тож мені було цікаво, чи хтось знає загальне правило роботи: "очистити", а не просто "зробити"

Відповіді:


17

Ви запускаєте очищення в двох ситуаціях - коли ви хочете запакувати вихідний код (і тому не потрібно / хочете вбудовані об'єкти) АБО коли у вас є якісь причини вважати, що вбудовані об'єкти погані.

У вашому випадку ви використовуєте "очистити", щоб виправити проблему, яка, ймовірно, є наслідком помилкового Makefile. Щось там не перекомпілюється, коли слід, і це призводить до того, що вихідний двійковий файл буде поганим.

Існує багато причин, що можуть статися, залежно від складності вашого проекту та того, як ви використовували make, але суть його полягає в тому, що вам потрібно витратити деякий час на налагодження Makefile.


6
Ви забуваєте "деякі зміни в середовищі збирання", такі як оновлений компілятор, нові версії бібліотек тощо. Завжди хороша ідея "очистити" в цих випадках, щоб переконатися, що всі модулі співають з одного пісенного аркуша!
Джеймс Андерсон

2
@JamesAnderson Можна стверджувати, що це просто випадки глючних Makefiles.
Крістоф Простой

4
@KristofProvost: Я не впевнений, що класифікував би "Новий ABI" (можливо, за допомогою нової версії компілятора) як "баггічний Makefile". Це достатньо поза межами того, що я б очікував «змусити» подивитися.
Ватін

1
Щоправда, але можливо (і навіть не все так складно) додати компілятор до складних файлів як необхідну умову. Цього достатньо, щоб усунути проблему. Загалом це не величезна проблема, і все одно це дуже рідко. Я зазначив, що я використовував (і писав) makefiles, які враховують прапорці компілятора та інше. Це теж досить рідко в makefiles, але дуже корисно (більше, ніж перевірка компілятора;)). Мої сподівання на гарні, добре написані файли досить високі. Мої очікування від середнього makefile досить нижчі ...
Kristof Provost

8

Я згоден з відповіддю Майкла Коне загалом. Я хотів би додати, що вам потрібно прочитати документи про встановлення, щоб знати, що насправді "очищає". Тут можуть бути різні рівні чистоти, які, можливо, вам доведеться використовувати, як-от "зробити справжній чистий" та "зробити смутний". Для них існують неофіційні умови, але нічого не вирізане з каменю.


2
+1: "Вам потрібно прочитати документи про встановлення, щоб знати, що насправді робить" очищення ". Не існує "загального правила". Ви повинні насправді читати документи.
С.Лотт

5

Я розумію, що це ваш проект, тож ваш makefile. Моя мета - make завжди створювати правильну збірку, якщо це можливо зробити. Якщо make cleanпотрібно відновитися після якогось стану, то, на мою думку, makefileце неправильно, і його слід виправити. Якщо ваші залежності були розраховані правильно, то простий makeповинен перекомпілювати все, що потрібно перекомпілювати.


2
Я згоден. В цей час це вже не проблема майже нескінченного дискового простору, але я досить старий, щоб пам’ятати, коли очищення та створення realclean використовувалися в основному для економії дискового простору після того, як створений пов'язаний виконуваний файл. Виготовлення GCC, apache, perl і т. Д. Залишило багато речей.
Білл Рупперт

1

Я б побіг "очистити" перед нічною побудовою. У цьому випадку додатковий час, необхідний для повного складання, ймовірно, не матиме великого значення, але додаткова безпека, яку ви отримаєте, переконавшись, що все в правильній версії, мабуть, того варта.


Це залежатиме від розміру вашого проекту. Там, де я використовую для роботи, додаткове нарощування зайняло б 2-4 години, коли зміни, пов'язані з іншими сайтами, відбулися протягом ночі. Чиста конструкція може зайняти від 7 до 9 годин. Крім того, у нас іноді було 2 або 3 відділення, які ми хотіли б побудувати. Навіть на швидких машинах дуже великі бази коду потребують зовсім іншого поводження з меншими.
TafT
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.