記事ディレクトリ
makeの構文は多く、複雑です。基本的なルールは次のとおりです。
基本的なルール
Makefileの基本的なルールは次のとおりです。
目标(target):目标文件1 目标文件2
<tab> gcc -o 预建立的执行文件 目标文件1 目标文件2
注:
コマンドラインはTabjキーで開始する必要があります
- Makefileでは#はコメントを表します
- コマンドラインにある必要がある最初の文字(たとえば、gccコンパイラコマンド)
- ターゲット(ターゲット)と依存ファイル(つまり、ターゲットファイル)は、次のように区切る必要があります。
2つ以上のファイルリンク操作を実行する場合:
例:3つのファイルがある場合:main.c print.c print.h、
3つの関係は次のとおりです。main.c(メインプログラム)依存—> print.c依存— > print.hの
場合、対応するMakefileは次のように記述できます。
- より複雑
test : main.o print.o
gcc -o test main.o print.o
mian.o : main.c print.h
gcc -c main.c
print.o : print.c print.h
gcc -c print.c
clean:
rm *.o
- 最も単純なもの(GNUに3つのファイル間の関係を導き出させます)
CC := gcc
objects := main.o print.o
test : &(objects)
$(CC) -o test $(objects)
&(objects) : print.h
main.o : main.c
print.o : print.c
clean:
rm *.o
このように、Makefileにはtestとcleanの2つのターゲットがあります。testをビルドする場合は[make test]と入力し、すべての.oファイルをクリアする場合は[makeclean]と入力します。最初にターゲットファイルをクリアしてからメインプログラムをコンパイルする場合は、[make cleantest]と入力します。
[注]
Makefileとbashシェルスクリプトの構文は同じではありません。変数の基本的な構文は次のとおりです。
- 変数と変数の内容は「=」で区切られ、両側にスペースを入れることができます
- [Tab]キーは変数の左側には使用できません
- 変数と変数の内容に「=」の両側に「:」を含めることはできません
- 習慣的に、変数は[大文字]に基づくのが最善です
- 変数を使用する場合は、$ {variables}または$(variables)を使用してください
- 前述の変数CFLAGSなど、シェル内の環境変数を適用できます。
- 変数はコマンドラインモードでも設定できます
gccはコンパイル時に環境変数CFLAGSをアクティブに取得するため、この環境変数をシェルで直接定義するか、Makefileファイルで定義するか、次のようなコマンドラインで設定できます。 :
[root@zhang ~]# CFLAGS="-Wall" make clean main
# 这个操作在使用 make 编译时,会读取 CFLAGS 的变量内容
このようにすることもできます
LIBS = -lm
OBJS = main.o haha.o sin_value.o cos_value.o
CFLAGS = -Wall
main : $(OBJS)
gcc -o main $(OBJS) $(LIBS)
clean :
rm -f main &(OBJS)
その中で、環境変数を使用するためのルールは次のとおりです。
-
makeコマンドラインの後に追加された環境変数が優先されます。
-
Makefileで指定された環境変数は2番目です。
-
シェルの元の環境変数は3番目です。
-
$ @:現在のターゲット(ターゲット)を表します