[Make&MakeFile]C/C++の構築


  以前一緒に研究していた教授はいつも私に記録させてくれた.
頭で覚えたいだけなら、忘れても何を忘れたのかわからないと、最近実感したので、勉強の一つ一つをブログに記入しています.

1.基本概念の説明


1)Makeは何ですか。なぜ使いますか。

Makefileについてお話しする前に、ソフトウェアMakeについてご紹介します.

  まず、makeというソフトウェアは、UNIXおよびLinux環境で主に使用されるプログラムを構築するためのツールです.端末にmakeで使用可能なソフトウェアを入力します.
  では「なぜコンパイラを直接使わずにmakeを使うのですか?」このようにすると疑問に思うかもしれません.理由は以下の通りです.
  • ソースファイルとHeaderファイルが多数ある場合は、別々にコンパイルするのではなく、簡単に迅速に処理できます.
  • プログラムは属性構造から把握しやすく、ファイル管理に便利である.
  • プログラミングは一度しかやっていないので、終了ではなく継続的なパッチなので、メンテナンスが行き届いています.
  • 2)Makefileとは?


       Makefileは、makeがどのコマンドをコンパイルおよび実行するか、makeを実行するには、ディレクトリにMakefileが必要であることを示すファイルです.さらに、CMakeによってMakefileを生成することができ、開発者が依存情報を誤って記述し、バージョンが歪むことを防止するためのプログラムである.

    2.使用方法


    1)プロファイル


    構築するソースコードとヘッダファイルを構成します.
  • ヘッダファイル
  • は、使用するヘッダおよび関数を予め定義している.
  • 関数を定義するソースファイル
  • mainを含むソースファイル
  • この3つのファイルからなる実行可能ファイルを作成します.各ファイルのコードは次のとおりです.
  • header.h
  • #include <stdio.h>
    void print();
  • func.c
  • #include "header.h"
    
    int add(int a, int b)
    {
        return a+b;
    }
    int sub(int a, int b)
    {
        return a-b;
    }
    void print(int a, int b)
    {
        printf("add() res : %d\nsub() res : %d", add(a,b), sub(a,b));
    }
  • main.c
  • #include "header.h"
    
    int main()
    {
        int a = 5, b = 3;
        print(a, b);
        return 0;
    }

    2)コンパイル


    ファイル構成が完了したら、Makefileを作成してコンパイルします.Makefileは、4つの主要コンポーネントを含む.
  • マクロ(Macro)
  • ターゲット
  • 依存性
  • コマンド(Recipe)

  • (読者のために端末フォントの大きさを育成し、注釈の親近感を加える)
    上記の構成から除外されました.
    EXE : function.o main.o
    	gcc -o EXE function.o main.o
    このコードはマクロの真下に追加する必要があります.次に、これらの構成を見てみましょう.
  • Macro:常用文字列を含む変数ならもっといいですか?
    よく使われる文字に名前を付けるのは、CかC++の前処理部分と考えられます!
  • Tartget:コンパイルによって作成する(目的)ファイル.
  • Dependence:ターゲット部分をコンパイルするための材料と考えられる.
  • Recipe:実際のコンパイル部として実行するコマンドを書けばよい.
  • Makefileが書き終わった以上、本格的なコンパイルを始めましょう.

      端末を開き、makeを入力すると、Makefileの内容に従ってコンパイルされ、ターゲットファイルおよび実行可能ファイルが順次作成される.
      しかし、このように終わるのはまだ足りないようですね.はい、fanytargetについてはまだ説明していません.これは、ターゲットの位置にあるが、コンパイルするファイルではない偽のターゲットに直訳することを意味します.では、どこで使われているのか調べてみましょう.

     こう書いてありますcleanという偽の目標を指定しましたよね?makeの後に貼り付けてコマンドラインを実行すると、cleanと書かれたrecipeのrm *.o EXEが実行されます.次のようになります.つまり、必要に応じて呼び出され、使用するコマンドの名前を付けることができます.

    整理する

  • ターゲット、依存関係、およびRecipe構成(最終コンパイルコンテンツ向上)
  • 常用オプションまたは単語マクロにより
  • を整理する.
  • 必要に応じてPhonyTarget
  • を設定