linux makefileの作成


概要:


gccをコンパイルする際に効率的にコンパイルするmakeについて説明します.

C言語コンパイル基礎


Source file:


C言語を用いて文法論理に従って作成されたプログラムを元のファイルまたはソースファイルと呼ぶ.
C言語で作成したソースファイルの拡張子は.cになります.

Object file:


コンピュータは0と1で構成されているため、ソースファイルを0と1に変更する必要があります.これをcompileと呼びます.compileはコンパイラによって実行され,コンパイルが完了してマシンに変換されるファイルをオブジェクトファイル(Object file)と呼ぶ.
拡張子は.私.objになる.

linker


1つ以上のオブジェクトファイルとライブラリファイル、オペレーティングシステムインタフェースを担当する起動コードを1つのファイルにマージする操作をリンクと呼びます.
linkが終了したら、新しい実行可能ファイルまたはライブラリファイルを作成します.

GCCコンパイルの使用

  • makeファイルを最初に作成する前に、calc.cおよびcore.cというソースファイルが2つあるとします.
  • gcc -c -o calc.o calc.c
    gcc -c -o core.o core.c
  • -cオプションは、オブジェクトファイルを作成するために使用されます.
  • -oオプション作成するファイル名を指定します.
    (-oオプションが指定されていない場合は、a.outを自分で作成します.)
  • 次に、実行可能ファイルを作成します.
    gcc -o calc.exe calc.o core.o

    make fileの作成

  • Makeは、ファイル間の依存関係を定義し、SHELLコマンドを順番に実行できるようにするためにMakefile(技術ファイル)の指示コマンドコンパイラに従ったファイル管理ユーティリティです.
  • Make file基本構造
  • CC = gcc     //매크로 정의 
    calc.exe: calc.o core.o //타겟할 목표: 의존파일, 의존 파일 
    	$(CC) -o calc.exe calc.o core.o //실행할 명령어들
    calc.o: calc.c
    	$(CC) -c -o calc.o calc.c
    core.o: core.c
    	$(CC) -c -o core.o core.c
    ただし、$()はマクロです.cc=gccと定義し、ccでgccを定義する
    上記の変数(に示すように)のみを変更することで、コマンドのcommandを簡単に変更できます.
  • マクロを参照する場合は、カッコまたはカッコの前に$を付ける必要があります.
  • -W-Wallは、コンパイル時にコンパイル不可能なエラーをすべて出力できるオプションです.
  • 効率的なmakefile

    CC = gcc
    CFLAGS = -W -Wall
    Target = calc.exe
    Object = calc.o core.o
    //메크로 정의
    all : $(Target)
    $(Target): $(Object)
    	$(CC) $(CFLAGS) -o $@ $^
    clean: 
    	sudo rm *.o $(Target)
    '$@'現在のターゲットの名前
    '$^'現在のターゲットの依存オブジェクトのリスト
    参考にする。
    参考にする。
  • コマンドのみでmakeを実行すると、一番上のtargetが自動的に実行されます.このチェック条件では、targetに条件がある場合、targetも実行されます.
    これは、再帰的に実行されることを意味します.
  • makefileの重要なルールの1つは、targetではない条件をチェックし、条件が時間を変更した場合に実行することです.