Makefile作成


makefileファイルの使い方
  • makefileルール
  • makefile実行原理
  • makefileカスタム変数
  • makefile自動変数(コマンドでのみ使用可能)
  • makefileマッチングモード
  • makefile共通関数
  • makefileクリーンアッププロジェクト
  • makefileルール
    ターゲット:依存(tab)コマンド
    makefile実行原理
    例1:
    app:add.o main.o sub.o
            gcc add.o main.o sub.o -o app
    
    add.o:add.c
            gcc add.c -c
    main.o:main.c
            gcc main.c -c
    sub.o:sub.c
            gcc sub.c -c
    

    makefileファイルの最初のルールは、makefileが実行可能なファイルを構築する究極の目標です.ルール内の依存が存在しない場合は、依存を生成するルールがあるかどうかを下にクエリーして実行します.ルールを実行すると、ターゲットと依存時間が比較されます.依存の変更時間がターゲットの時間より遅い場合、ターゲットが再生成されます.すなわち、依存ファイルが変更された場合、ターゲットが再生成される.
    makefileカスタム変数
    構文:obj=main.o add.o sub.o target=app説明:makefile内蔵変数はすべて大文字で、カスタム変数は小文字を使用します.変数の値を取得:$(obj)
    makefile自動変数(コマンドでのみ使用可能)
    $@:ルール内のターゲットを表します$^:ルール内のすべての依存を表します
    makefileマッチングモード
    例:o:%.c:ターゲットと依存をマッチングします.
    例1をカスタム変数、自動変数、およびマッチングモードを使用する形式に変更します.
    obj = main.o add.o sub.o
    target = app
    $(target):$(obj)
    	gcc $(obj)  -o $(target)
    
    %.o:%.c
    	gcc $< -c -o $@
    

    説明:一致モードはワイルドカードに基づいて置き換えられ、実行されます.例えばaddに遭遇する.o存在しない.add.oマッチングできます.addに相当する.o:add.c gcc add.c -c -o add.oのルール
    makefile常用関数
    1、パスの下のファイル名を取得する:src=$(wildcardディレクトリ/ファイル名)例えば:src=$(wildcard./*.c)現在のディレクトリのすべての「.c」ファイル2、文字列置換obj=$(patsubst%.c,%.o,$(src))src変数のすべての「.c」ファイルを「.o」ファイルに置き換えます.
    再改造例1:
    src = $(wildcard ./*.c)
    obj = $(patsubst %.c,%.o,$(src))
    target = app
    
    $(target):$(obj)
    	gcc $^ -o $@
    %.o:%.c
    	gcc $< -c -o $@
    

    makefileクリーンアッププロジェクト
    クリーンアップルールclean:rm*を作成します.o app使用:make cleanの欠点:現在のディレクトリにcleanというファイルがある場合、cleanルールの実行に影響します.makeコマンドはcleanファイルの時間をチェックするので、cleanが最新だと思います.cleanルールが実行できなくなります.
    解決方法:cleanルールを擬似ルール擬似ルールとして宣言:ディレクトリ内の同名ファイルと時間的に比較することなく、重複するファイルとルールターゲットの重複時の構築問題を防止します.
    .PHONY:ルールターゲット(手前に「.」)例:PHONY:clean