Makefile


🤷‍♀️なぜMakeが必要なの?


GCCコンパイラを使用してコンパイルを行うと、毎回複数のコマンドが発生します.これらの問題を解決するために、Linuxのaliasのようにコマンドスクリプトを保存し、コンパイルを自動的に実行できます.
行うツールをmakeと呼びます.
makeの利点
各ファイルの繰り返しコマンドを自動化することで、
  • は時間を節約します.
  • 計画の依存構造を迅速に把握し、管理しやすい
  • 簡単な繰り返しタスクと書き換えを最低
  • に下げる

    📁Makefile


    Makeを実装するには、プロジェクトフォルダのルートディレクトリにMakefileというファイルを作成する必要があります.このファイルはMakeがこのプロジェクトを構築する方法を指定したファイルで、指定した構文に従って作成する必要があります.

    💡例を通して簡単に理解してみましょう!!



    上記の関係に基づいてdaily exe実行可能ファイルを作成します.
    1.cファイルからobjファイルを作成する
    gcc -c -o memo.o memo.c
    gcc -c -o calendar.o calendar.c
    gcc -c -o main.o main.c
    2.各オブジェクトファイルをパッケージ化し、コンパイルによりdaily exe実行可能ファイルを生成する
    gcc -o diary_exe main.o memo.o calendar.o
    チェック
  • 実行可能ファイル
  • $./diary_exe
    コンパイルをパッケージ化する場合.もしcファイルが100個だったら?!すべての100ファイルをコマンドに書き込む必要があります😂
    だから必要なのはmakeMakefileです!

    ➰Makefileの構成


    -ターゲットファイル(Target):コマンド実行結果を保存するファイル
    -依存性:ターゲットファイルの作成に必要な材料
    -コマンド(Command):実行するコマンド
    -マクロ(マクロ):コードを簡略化する方法

    これは最終的なMakefileです!一つずつ開けましょうか?
    トップクラスCC、CFAGS、TARGET、OBJECTSは매크로 정의の一部である.
    💡マクロ定義規則
  • マクロを参照する場合は、カッコまたはカッコの前に「$」を付けます.
  • ラベルで開始することはできません.マクロ名には、、=、#、""などを含めることはできません.
  • マクロは、変換される位置の前に定義されなければならない.
  • マクロを見て...
    TARGETは最終目的ファイル、OBJECTSはtargerの作成に必要な依存ファイルを表します.
    ここでは特別な記号が目立ちます.
    $@、$^これらは내부 매크로と呼ばれています.
    💡内部マクロ
  • "$@":現在のターゲット名
  • "$^":現在のターゲットの依存オブジェクトリスト
  • 次に,上記のコードを説明するために必要なすべてのことを知った.意味を1行1行解釈して、整理します.
  • gccコンパイラ
  • を使用
  • 小エラー出力
  • 最終ターゲットファイルはday exe
  • OBJECTとして定義するファイルはmemoです.o main.o calendar.o
  • allは現在使用されていませんが、複数のターゲットファイルに使用されています.
  • OBJECTを使用して、
  • ターゲットファイルを作成します.(OBJECTファイルがない場合は、OBJECTファイルと同じ名前のCファイルを検索し、OBJECTファイルを生成します.)
  • gcc -o diary_exe memo.o main.o calendar.oと同じ
  • スタックターゲット