- 以下は、「一緒にMakefileを書くために私に従う」のノートです
- 学習目標:Makefileのマイナーな作品を書く能力が自動的に生成されたMakefileにCMakeを読み取ることができます
- ルールにファイルがそのように、任意のディレクトリにコンパイルされたファイルをコンパイルし、された後、コンパイルするファイルかなどのプロジェクト全体を、ツールが自動化されたビルドツールをされていることを確認し、スクリプトファイルを書くことにしたコンパイルすることができます。
- この本のバージョンは、非常に多くの年のためのツールを作る上映が更新されていない、ローカルバージョンは3.81で、3.80であります
- コンパイル知識について、システムは、ドラゴン・ブック「コンパイラ原理」を学ばなければなりませんでした
- エンジニアリングと8 Cヘッダファイルのファイルの3基の例には、ダウンロードがないため、と推測していた、あります
- command.c display.c insert.c search.c files.cあるutils.c main.cのkbd.c
- defs.h command.h buffer.h
- 依存関係の最初の行為は、第2行動コマンドは、2行目は、Tabキーで開始する必要があります
- また、コンパイラや他のアクションとは何の関係もない「クリーン」を定義することができます
- GNUは、作成したファイルは自動的にファイルの依存関係のコマンドの背面にプッシュすることができます
- 「.PHONYは、」明示的に同じ名前のファイルが避けるために、ターゲットはダミーファイルであることを示しています
- フロントのコマンドを追加「 - 」役割は次のとおりです。コマンドが間違っている場合、このエラーを無視して他のコマンドを実行し続けます
- 環境変数$ {MAKEFILES}を設定しないでください
- セミコロン「;」は、複数のコマンドを分離するために使用されます
- コマンドが長すぎる場合は、バックスラッシュ「\」支店を使います
- これは、擬似目標は、常に最新の特徴と、依存ファイルが背後に存在する場合、更新されることはありません
- "$?" という意味:
- 「$ @を」手段:順番にすべての目標を保ってストレージアレイのターゲットコレクション、
- 「$ <」とは、すべての依存ターゲットセット
- gccのコマンド:gccの-MM main.cに自動的に生成されたファイルの依存関係、依存性はMakefileで述べられていない必要があります(-M標準ライブラリのヘッダファイルでも、それが含まれます)
- あなたは、次のコマンドをコマンドでアプリケーションの結果をしたい場合は、これらの2つのコマンドは、セミコロンで区切られました
- 伝統的なMakefileの変数名は大文字にしますが、場合は、現在の変数名、変数回避の競合やシステム、事故に推奨されます。
- 一般的には、変数名の使用は、このようになります。$ {}は、よりセキュリティのために完全に括弧します。
- ネイチャーマクロ変数名は、最初の実行時に拡大する、本質は「拡張」です
- 「=」と「:=」違いがある:前者は後で変数、唯一の以前の参照変数を参照することができます
- 目標変数は:ターゲット、その作用範囲にローカル変数を設定し、その値が唯一の範囲内で有効であるように、この規則は、のみ関連するルールであり、かつチェーンルール以外のグローバル変数の値には影響しません
- パターン変数:我々は、モデルに沿って、すべてのターゲット上の変数を定義することができ、この変数は、ローカル変数であります
- 条件式:メイクファイル、コンパイル済みのC言語と同等のものを読み込むときに自動変数ための条件式では、(例えば、「$ @を」など)の自動変数を作らないように確認しますが、条件式の値に基づいて計算されます実行時にそれがあり、別のファイルに2つの部分に全体の条件文を許可していません。
- 機能であって、文字列操作関数、ファイル名操作機能; foreachの機能;、呼び出し、起源、シェル関数ならば、制御は機能を警告、エラーを確認します
- 実行してください:メイクファイルの開発、目標を設定するなど
- パラメータを作る:相対パスとして、ディレクトリ製剤として最後のディレクトリに、パスパラメータの複数のパスの前に復路場合。
- コマンドの数は、同時に実行されます。-j --jobs
- 暗黙のルールを作る:あなたは暗黙のルールを使用する必要があるターゲットを生成したい場合、あなたは何をする必要があることは、この目標のルールを記述することではありません
- あなたが明示的にルールを設定しますが、暗黙のルールが有効になるよう、まだ先に「隠されたルール」のルールは、より前方のルールはより頻繁にして、使用されている場合は暗黙のルールは、オーダーです。
- 2つの暗黙のルール、「モデル規則」と「ルール接尾辞が」あり
- サフィックスルールは:限り、ファイル拡張子が「サフィックスリスト」に含まれているとして、これらの暗黙のルールが有効になります。
- 暗黙変数ルール、パラメータに関するコマンドで二値変数と変数。
- CPPはCプリプロセッサです
- C ++ソースコードの接尾辞*の.ccに
- 実際には、ライブラリ・ファイルは、ファイル* UNIXにおける中間ファイルの.o .objファイルまたは*、静的ライブラリ*の.A、動的ライブラリ*の.soがパッケージ化されています。
- キー - パターンルール
- 使用パターンルールは、暗黙のルールを定義します
- 「%」は、任意の文字の一つ以上の表現を意味します。また、依存プロジェクトに「%」を使用しますが、プロジェクトの値に依存し、そのターゲットに依存することができます。これは、「%」値の目標は、依存ターゲットの値を決定することを意味します
- %の.o:%.C。<コマンド......>
- 「%」モードでは、ターゲットに依存が決定されると、その後、現在のディレクトリ内のすべてのファイル名を一致させるために必要とされるであろうことを確認してください
- キー - 自動変数!
- オートメーション変数
- 「$ @」はすべての目標を一つずつの値を示し、「$ <」すべてのターゲットが値一つ一つに依存していることを示しています。
- $ @のターゲットファイル表現のルールが設定します。
- $ @
- ファイル表現のルールセットをターゲットにしています。複数のターゲットがある場合、モデルのルールでは、その後、「$ @が」一致あり
- 収集対象のスキーマ定義。
- $%
- ターゲットは、ターゲットメンバー名の規則を表す、ライブラリファイルの場合のみ。例えば、目標は「foo.aある場合
- (Bar.oは) "そして" $%はbar.o "" $ @を "ある" foo.a」 "である"。ターゲットは、ライブラリファイル(Unixのではない場合
- Windowsの[.LIB])、その値が空である下の下では、[.A]です。
- $ <
- ターゲットの名前の最初の目標を頼ります。ターゲットが依存している場合のモード(すなわち、「%」)が定義され、その後、「$は<」意志
- モデルは、ファイルセットのシリーズに沿ったものです。それは1枚ずつ取り出されることに注意してください。
- $?
- ターゲットよりもすべての依存対象の新しいセット。スペースで区切られています。
- $ ^
- すべてが目標のセットに依存しています。スペースで区切られています。いくつかの重複は、依存対象である場合は、この変数こと
- 一つだけを残して、ターゲットに依存して、重複削除します。
- $ +
- 「$ ^」のような変数は、すべてのターゲットコレクションに依存しています。それはちょうど重複する依存性の目標を削除しません。
- $ *
- この変数は、ターゲットモード「%」セクションと前を表します。目標は「DIR / a.foo.b」であり、ターゲットの場合
- モードは、 "$ *" の値が "DIR / a.foo" で、 "%。B" です。この関連付けられた変数ファイル名構造より
- それは以上です。ターゲットはモードを定義されていない場合は、「$ *」には、対象のファイルならば、ただし、派生することはできません
- サフィックスが識別されていることを確認し、その後、「$ *は、」接尾辞のその部分に加えています。たとえば、次の目標は、「foo.cの」である場合には、理由
- 「.Cは、」makeが接尾辞で識別することができますので、 『$ *』の値が 『foo』というです。この機能は、GNUのある作り、
- おそらくメイクの他のバージョンとの互換性はありません、あなたが暗黙のルールを除いて、「$ *を」利用するのは避けるべきですので、
- または静的モード。目標は、サフィックスが特定できないようにすることです場合は、「$ *は」nullです。
- あなただけ動作するように更新されたファイルに依存したい場合は、「$?」を明示的なルールでは有用であるが、例えば、あなたが持っていると仮定
- 他のいくつかのオブジェクトファイルによって更新され、「LIB」と呼ばれるライブラリファイル、。パックされた後、オブジェクトファイルの比較
- 効率的なMakefileのルールは以下のとおりです。
- LIB:foo.oのbar.o lose.o win.o
- ARのR LIBの$?
- 上記の自動可変量で。ファイルの拡張子があるだけで4つの変数($ @、$ <、$%$ *)
- 作品は、他の三つの値ながら、ファイルのリストです。これらの7つの自動変数は、現在では、ファイルまたはディレクトリ名を取得することができます
- ファイル名は、単に「D」単語または「F」と、スキーマディレクトリに準拠しています。これは、GNUの旧バージョンの機能を作るあり、
- 新バージョンでは、我々は関数を使用する「DIR」または「notdirは」行うことができます。「D」の意味は、それをディレクトリであります
- ディレクトリで、「F」の意味は、ファイルが、ファイルです。
- 以下は、上記のために、それぞれ7つの変数、プラス「D」または「F」であることを意味します:
- $(@ D)
- "$ @を" カタログセクション(エンドとしてスラッシュしない)、と述べ、もし "$ @を" 値 "DIR / foo.oの"、そして "$(@ D)"
- これは、「DIR」であり、「$ @を」スラッシュが含まれていない場合、その値は、「」(現在のディレクトリ)。
- $(@ F)
- 彼は、 "$ @を" ファイルの部分、 "$ @を" 値 "DIR / foo.oの" 場合は、 "$(@ F)は" "foo.oの"、 "$(@ F)" である、と述べました
- 同等の機能 "$(notdir $ @)"。
- "$(* D)"
- "$(* F)"
- 上記と同様に説明し、また、一部のディレクトリとファイルのファイルを取ります。上記の例については、 "$(* D)"
- 戻る "DIR"、および "$(* F)" を返す "foo" という
- "$(%のD)"
- "$(%のF)"
- ファイルディレクトリは、一部の機能がパッケージ・ファイル・メンバーの一部を示しています。これは、「アーカイブ(メンバー)」の形状に等しいです
- 「メンバー」でターゲットのタイプは、便利な別のディレクトリが含まれています。
- "$(<D)"
- "$(<F)"
- ファイルの一部に依存する部分でディレクトリとファイルを表します。
- "$(^ D)"
- "$(^ F)"
- ディレクトリセクションとファイルのすべての依存ファイルのセクションを表します。(非同一)
- "$(+ D)"
- "$(+ F)"
- ディレクトリセクションとファイルのすべての依存ファイルのセクションを表します。(同じであってよいです)
- "$(?D)"
- "$(?F)"
- それぞれ、およびファイルディレクトリの一部は、部分的に更新されたファイルを依存しています。
- 最後に、私は不必要なトラブルを避けるために、その「$ <」のためにあなたを思い出させるだろう、私たちはより良いもの$をお返ししたいです
- 例えば、「$(<)」のように括弧で特定の文字、「$ <」優れている、より。
- 私たちは、順番にこれらの変数が唯一のルールを使用することに注意する必要があり、一般的に「明示的なルール」と「静的です
- パターン・ルール「(前回参照」書き込みルール「の章を)。それは暗黙のルールに意味がありません。
2.26-GNU作るチュートリアル
おすすめ
転載: www.cnblogs.com/lizhensheng/p/11117200.html
おすすめ
ランキング