makefileのジェネリック版

実際のプログラムファイルのうち、ヘッダファイル、ソースファイル、オブジェクトファイル、実行可能ファイルに分割し、ファイルを分類するために、この時間大きいです。それは別のディレクトリにそれらを入力し、通常のファイルでファイルで、この時間Makefileは、これらのファイルの一元管理を必要とするターゲットディレクトリの生産ターゲットファイル、実行可能なディレクトリに実行ファイル。

DIR_INC = ./ 含む
DIR_SRC = ./ SRC 
DIR_OBJ = ./ OBJ 
DIR_BIN = ./ ビン

SRC = $(ワイルドカード$ {DIR_SRC} / * .C)
OBJ = $(patsubst%以下の.C、$ {DIR_OBJ} /%。 O、$(notdir $ {SRC}))

TARGET =メイン

BIN_TARGET = $ {DIR_BIN} / $ {TARGET} 

CC = GCC 
CFLAGS = -g -Wall -I $ {DIR_INC} 

$ {BIN_TARGET} $ {OBJ} 
    $ (CC)$(OBJ)-o $ @ 

$ {DIR_OBJ} /%O:$ {DIR_SRC} /%C 
    $(CC)$(CFLAGS)-c $ <-o $ @ 

.PHONY:クリーン
    
クリーン。
    見つける$ {} DIR_OBJ -name * .oの-execのrm -rf {}

次のように説明しました:

(1)の$ @でMakefileのシンボル、$ ^、意味$ <:
  $ @をターゲットファイル表し
  ^は、すべての依存ファイルを表す$
  $は<依存ファイルを表す
  $新しいリストを表現するには、ターゲット以外の文書に依存しているの?

(2)ワイルドカード、notdir、patsubstの意味:

  ワイルドカード:ワイルドカード拡張
  notdir:パスの削除
  patsubstを:代わりにワイルドカード

SRC = $(ワイルドカードの* .c)

このようINCなどサブディレクトリなどのサブディレクトリが存在する場合、現在のディレクトリ内のすべての.cファイルは、このように、ワイルドカード機能を追加指定し、コンパイルに等しいです:

SRC = $(ワイルドカードの* .c)$(ワイルドカード株式会社/ *。C)

(3)GCC -I -L -l区別:

       gccの-oハローのhello.c -I /ホーム/ハロー/ -L /ホーム/ハロー/ libに-lworldが含まれます

       上記の文章は、コンパイル時に言ったのhello.c -I /ホーム/ハロー/ヘッダファイルを見つけるために、最初のディレクトリとしての/ home /ハロー/ includeディレクトリを表現含まれ、

   順序を見ると、次のとおりです。/ホーム/ハロー/含める - >は/ usr /含める - > / usr / local / includeの

   -L /ホーム/ハロー/ libには、カタログファイルを見つけるために、最初のように/ホーム/ハロー/ libディレクトリを表し、

   順序を見ると、次のとおりです。/ホーム/ハロー/ libに - > / libに - >は/ usr / libに - >は/ usr / local / libに

       -lworld(「-static」を見libworld.aに参加するためのgccコンパイラオプションは、静的ライブラリファイルを表す場合)上記のlibパスに動的ライブラリファイルを表すlibworld.so探し

 

おすすめ

転載: www.cnblogs.com/wanghao-boke/p/11492898.html