Makefile-マクロ
ザ・ makeプログラムを使用すると、変数に似たマクロを使用できます。マクロは、Makefileで=ペアとして定義されます。例を以下に示します-
MACROS = -me
PSROFF = groff -Tps
DITROFF = groff -Tdvi
CFLAGS = -O -systype bsd43
LIBS = "-lncurses -lm -lsdl"
MYFACE = ":*)"
特別なマクロ
ターゲットルールセットでコマンドを発行する前に、事前定義された特定の特別なマクロがあります-
$ @は、作成するファイルの名前です。
$?変更された扶養家族の名前です。
たとえば、次のようなルールを使用できます。
hello: main.cpp hello.cpp factorial.cpp
$(CC) $(CFLAGS) $? $(LDFLAGS) -o $@
Alternatively:
hello: main.cpp hello.cpp factorial.cpp
$(CC) $(CFLAGS) [email protected] $(LDFLAGS) -o $@
この例では、$ @はhelloと$?を表します。または$ @。cppは、変更されたすべてのソースファイルを取得します。
暗黙のルールで使用される特別なマクロがさらに2つあります。彼らは-
$ <アクションの原因となった関連ファイルの名前。
$ *ターゲットファイルと依存ファイルで共有されるプレフィックス。
一般的な暗黙のルールは、.cpp(ソースファイル)から.o(オブジェクト)ファイルを作成することです。
.cpp.o:
$(CC) $(CFLAGS) -c $<
Alternatively:
.cpp.o:
$(CC) $(CFLAGS) -c $*.c
従来のマクロ
さまざまなデフォルトのマクロがあります。「make-p」と入力してデフォルトを出力すると、それらを確認できます。それらが使用される規則から、ほとんどはかなり明白です。
これらの事前定義された変数、つまり暗黙のルールで使用されるマクロは、2つのクラスに分類されます。それらは次のとおりです-
プログラムの名前であるマクロ(CCなど)
プログラムの引数を含むマクロ(CFLAGSなど)。
以下は、makefileの組み込みルールでプログラムの名前として使用されるいくつかの一般的な変数の表です。
シニア番号 | 変数と説明 |
---|---|
1 | AR アーカイブ維持プログラム; デフォルトは `ar 'です。 |
2 | AS アセンブリファイルをコンパイルするプログラム。デフォルトは `as 'です。 |
3 | CC Cプログラムをコンパイルするためのプログラム。デフォルトは `cc 'です。 |
4 | CO RCSからファイルをチェックアウトするプログラム。デフォルトは `co 'です。 |
5 | CXX C ++プログラムをコンパイルするためのプログラム。デフォルトは `g ++ 'です。 |
6 | CPP Cプリプロセッサを実行するプログラム。結果は標準出力になります。デフォルトは `$(CC)-E 'です。 |
7 | FC FortranおよびRatforプログラムをコンパイルまたは前処理するプログラム。デフォルトは `f77 'です。 |
8 | GET SCCSからファイルを抽出するプログラム。デフォルトは `get 'です。 |
9 | LEX Lex文法をソースコードに変換するために使用するプログラム。デフォルトは `lex 'です。 |
10 | YACC Yacc文法をソースコードに変換するために使用するプログラム。デフォルトは `yacc 'です。 |
11 | LINT ソースコードでlintを実行するために使用するプログラム。デフォルトは `lint 'です。 |
12 | M2C Modula-2ソースコードをコンパイルするために使用するプログラム。デフォルトは `m2c 'です。 |
13 | PC Pascalプログラムをコンパイルするためのプログラム。デフォルトは `pc 'です。 |
14 | MAKEINFO TexinfoソースファイルをInfoファイルに変換するプログラム。デフォルトは `makeinfo 'です。 |
15 | TEX TeXソースからTeXdviファイルを作成するプログラム。デフォルトは `tex 'です。 |
16 | TEXI2DVI TexinfoソースからTeXdviファイルを作成するプログラム。デフォルトは `texi2dvi 'です。 |
17 | WEAVE WebをTeXに変換するプログラム。デフォルトは「織り」です。 |
18 | CWEAVE CWebをTeXに変換するプログラム。デフォルトは `cweave 'です。 |
19 | TANGLE WebをPascalに翻訳するプログラム。デフォルトは `tangle 'です。 |
20 | CTANGLE CWebをCに変換するプログラム。デフォルトは `ctangle 'です。 |
21 | RM ファイルを削除するコマンド。デフォルトは `rm -f 'です。 |
これは、上記のプログラムの追加の引数である値を持つ変数の表です。特に明記されていない限り、これらすべてのデフォルト値は空の文字列です。
シニア番号 | 変数と説明 |
---|---|
1 | ARFLAGS アーカイブ維持プログラムに与えるフラグ。デフォルトは `rv 'です。 |
2 | ASFLAGS `.s 'または` .S'ファイルで明示的に呼び出されたときにアセンブラに与える追加のフラグ。 |
3 | CFLAGS Cコンパイラに与える追加のフラグ。 |
4 | CXXFLAGS Cコンパイラに与える追加のフラグ。 |
5 | COFLAGS RCS共同プログラムに与える追加のフラグ。 |
6 | CPPFLAGS Cプリプロセッサとそれを使用するプログラム(CおよびFortranコンパイラなど)に与える追加のフラグ。 |
7 | FFLAGS Fortranコンパイラに与える追加のフラグ。 |
8 | GFLAGS SCCSgetプログラムに与える追加のフラグ。 |
9 | LDFLAGS コンパイラがリンカ `ld 'を呼び出すことになっているときにコンパイラに与える追加のフラグ。 |
10 | LFLAGS Lexに与える追加のフラグ。 |
11 | YFLAGS Yaccに与える追加のフラグ。 |
12 | PFLAGS Pascalコンパイラに与える追加のフラグ。 |
13 | RFLAGS Ratforプログラム用のFortranコンパイラーに与える追加のフラグ。 |
14 | LINTFLAGS 糸くずに与える追加のフラグ。 |
NOTE −「-R」または「--no-builtin-variables」オプションを使用して、暗黙のルールで使用されるすべての変数をキャンセルできます。
以下に示すように、コマンドラインでマクロを定義することもできます。
make CPP = /home/courses/cop4530/spring02