「make」だけでなく「make clean」を使用する場合の一般的なルールはありますか?


11

私は今、複数ファイルのプログラムを書いていますが、何らかの理由で「make」だけを実行しているようです(ほとんどの状況で直感的に実行する必要があると思うように)。問題の詳細を提供できると思いますが、重要なことは、「make clean」を使用したときに実行されることです。だから、誰かが「メイク」ではなく「メイククリーン」を実行するための一般的な経験則を知っているのだろうかと思っていました

回答:


17

make cleanは、ソースコードをパッケージ化する(したがって、ビルドされたオブジェクトを必要としない/使用したくない)場合、またはビルドされたオブジェクトが不良であると信じる何らかの理由がある場合に実行されます。

あなたの場合、「make clean」を使用して、バグのあるMakefileの結果である可能性が高い問題を修正しています。そこにあるものは、必要なときに再コンパイルされないため、出力バイナリが不良になります。

プロジェクトの複雑さやmakeの使用方法に応じて、さまざまな理由が考えられますが、その要点は次のとおりです。Makefileのデバッグに時間をかける必要があります。


6
アップグレードされたコンパイラ、新しいバージョンのライブラリなどの「ビルド環境の変更」を忘れてしまいます。これらの場合、すべてのモジュールが同じソングシートから歌われていることを確認するために、常に「クリーン」にすることをお勧めします!
ジェームスアンダーソン

2
@JamesAndersonこれらは単にバグのあるMakefileのインスタンスであると主張できます。
クリストフプロボスト

4
@KristofProvost:「新しいABI」(おそらく新しいコンパイラバージョンの導入による)を「バグのあるMakefile」として分類するかどうかはわかりません。これは、「メイク」が期待する範囲を十分に超えています。
-Vatine

1
確かに、前提条件としてmakefileにコンパイラーを追加することは可能です(それほど難しくありません)。問題をキャッチするにはこれで十分です。全体として、それは大きな問題ではなく、とにかく非常にまれです。コンパイラーのフラグなどを考慮に入れたメイクファイルを使用(および作成)しているため、私は要点を述べました。これはメークファイルではあまり一般的ではありませんが、非常に便利です(コンパイラをチェックするよりも;))。良い、よく書かれたメイクファイルへの私の期待はかなり高いです。私の予想平均メイクは...かなり低い
クリストフ学長

8

マイケル・コーネの一般的な答えに同意します。「make clean」が実際に行うことを知るために、インストールドキュメントを読む必要があると付け加えます。「make realclean」や「make distclean」など、使用する必要のあるクリーンのレベルが異なる場合があります。これらには非公式の規則がありますが、石に刻まれたものはありません。


2
+1:「インストールドキュメントを読んで、「make clean」が実際に何をするかを知る必要があります」。「一般的なルール」はありません。実際にドキュメントを読む必要があります。
S.Lott

5

これがあなたのプロジェクトだと理解しているので、あなたのプロジェクトmakefileです。私の目標は、ビルドが可能な場合はmake 常に正しいビルドを作成することです。make clean何らかの状態から回復する必要がある場合、私の意見でmakefileは、これは間違っているため、修正する必要があります。依存関係が正しく計算されている場合、単純なものmakeは再コンパイルが必要なものをすべて再コンパイルする必要があります。


2
同意する。ほぼ無限のディスクスペースの問題ではなくなりましたが、リンクされた実行可能ファイルが作成された後、主にディスクスペースを節約するためにmake cleanおよびmake realcleanが使用されたことを覚えています。GCC、Apache、Perlなどを作成すると、たくさんのものが置かれます。
ビルルパート

1

夜間ビルドの前に「make clean」を実行します。その場合、完全なビルドを実行するのにかかる追加時間はおそらく重要ではありませんが、すべてが適切なバージョンであることを確認することから得られる追加の安全性はおそらく価値があります。


それはプロジェクトのサイズに依存します。私がインクリメンタルビルドで作業する場合、他のサイトからの変更が一晩で取り込まれ、2〜4時間かかります。クリーンビルドには7〜9時間かかります。その上に、構築したいブランチが2つまたは3つあることがありました。高速なマシンであっても、非常に大きなコードベースは小さなものとはまったく異なる方法で処理する必要があります。
TafT
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.