Makefileチュートリアル(未完続行)

2501 ワード

Makefile教程多篇,源于大神,整理一下,以后好找点:
私と一緒にMakefile(整理)、https://blog.csdn.net/haoel/article/details/2888?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-taskは私と一緒にMakefile(一)、https://blog.csdn.net/haoel/article/details/2886
私と一緒にMakefile(二)、https://blog.csdn.net/haoel/article/details/2887?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
私と一緒にMakefile(三)、https://blog.csdn.net/haoel/article/details/2888?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task … …
Makefileの使い方を整理して
一、Makefileのルール:
target ... : prerequisites ...
        command
        ...
        ...
  • target:オブジェクト(.o)ファイルまたは実行ファイル(targetがスペースで区切られている)
  • を含むターゲットファイル
  • prerequisites:targetを生成するために必要なファイル.
  • command:実行するコマンド.commandとprerequisitesが1行にある場合は、セミコロンで区切ります.(Tabキーで始まる)
  • edit : main.o kbd.o command.o 
           cc -o edit main.o kbd.o command.o 
    main.o : main.c  defs.h
           cc -c main.c
    kbd.o : kbd.c defs.h command.h
           cc -c kbd.c
    command.o : command.c defs.h command.h
           cc -c command.c
    clean:
    	   rm edit main.o kbd.o command.o 
    

    二、Makefileに変数を加える:
    objectsという変数を宣言します.その後、この変数を「$(objects)」で使用できます.
    objects = main.o kbd.o command.o
        
    edit : $(objects)
           cc $(objects) -o edit
    main.o : main.c defs.h
           cc -c main.c
    kbd.o : kbd.c defs.h command.h
           cc -c kbd.c
    command.o : command.c defs.h command.h
           cc -c command.c
    

    そして新しいものがあればoファイルを追加するには、objects変数を簡単に変更するだけでいいです.
    三、makeの「暗黙のルール」:
    makeは強力で、[.o]ファイルから[.c]ファイルとコマンドを自動的に導くことができるので、そんなに複雑に書く必要はありません.以下に変更できます.
    objects = main.o kbd.o command.o
        
    edit : $(objects)
           cc $(objects) -o edit
    main.o : defs.h
    kbd.o : defs.h command.h
    command.o : defs.h command.h
    
    .PHONY : clean
    clean :
             rm edit $(objects)
    
  • ".PHONY"は、cleanが偽のターゲットファイルであることを示します.この宣言があれば、「clean」ファイルがあるかどうかにかかわらず、「clean」というターゲットを実行するには、「make clean」だけです.

  • 四、別のスタイルのMakefile
    そんな缲り返しの[.h]を、しまっていいのか.だからもう一つの書き方があって、自分の好きなように選んでいます.
    #object
    objects = main.o kbd.o command.o 
       
    edit : $(object
         cc -o edit $(objects)
    $(objects) : defs.h
         kbd.o command.o files.o : command.h
        
    clean :
         rm edit $(objects)
    
  • 注釈は#で始まる.
  • コマンドが長すぎる場合は、改行記号''''として反斜枠('')を使用します.