[解決済み] makefileの*.o/.suffixesは何を意味しているのですか?
質問
Makefile のあちこちでこのようなコマンドを見かけますが、よく理解できません。
vpath.o: make.h config.h getopt.h gettext.h dep.h
そして
.SUFFIXES:
.SUFFIXES: .f .o
#
# %------------------%
# | Default command. |
# %------------------%
#
.DEFAULT:
@$(ECHO) "Unknown target $@, try: make help"
#
# %-------------------------------------------%
# | Command to build .o files from .f files. |
# %-------------------------------------------%
#
.f.o:
@$(ECHO) Making $@ from $<
@$(FC) -c $(FFLAGS) $<
は何を意味しているのでしょうか?
*.o
と
*.suffixes
というのは?
注:この2つのコマンドは、スクリプトの異なる部分からのものです。
解決方法は?
ご質問の1行目は、標準的なMakefileのルールに過ぎません。
vpath.o: make.h config.h getopt.h gettext.h dep.h
A
.o
これは、ソースファイルと最終的なコンパイル済みバイナリとの間にある中間生成物です。このファイルにはコンパイルされたコードが含まれていますが、まだ完全なライブラリやバイナリにリンクされたわけではありません。このルールは、単に
vpath.o
に依存します。
make.h
,
config.h
などがあり、それらが変更されるたびに再コンパイルが必要です。ビルドに必要なコマンドは
vpath.o
は、タブ文字でインデントして、次の行に続けてください。(あなたがすでに知っていることを繰り返していたらごめんなさい。あなたが最初の行のどの部分について混乱しているのかわからなかったので)。
その
.SUFFIXES
は実際のファイルのサフィックスを指しているわけではなく、単に makefile の中の特殊なルールで、 configure "suffix rules" に使われるものです。
サフィックスルールとは、以下のような形式のルールです。
.a.b
のようなものです。
.f.o
ルールがあります。これらは
make
を見るたびに、例えば
.f
ファイル(ソースファイル)を作成する際に
.o
ファイル (ターゲットファイル) から、そのルールにしたがって
$<
はソースファイルを示し
$@
はターゲットファイルを表します。
その
.SUFFIXES
target"は、サフィックスルールで使用できるサフィックスを定義する方法です。前提条件なしで使用する場合は、内蔵のサフィックスリストをクリアします。前提条件ありで使用する場合は、サフィックスルールで使用できる既知のサフィックスリストにそれらを追加します。
GNUでは
make
を使用すると、より強力でより明確な
%
のように、パターンルールを形成することができます。
%.o: %.c
gcc -c -o $@ $<
となり、サフィックスルールに相当します。
.c.o:
gcc -c -o $@ $<
をご覧ください。 GNU Makeのドキュメント をご覧ください(ただし、GNUの拡張機能についても触れています)。 シングルUnix仕様/POSIX は、一般的で移植可能な構文です。
関連
-
[解決済み】makefile:4。*** missing separator. 停止する
-
[解決済み】Makefileの中の.PHONYの目的は何ですか?
-
[解決済み] makefileの "all "は何の略ですか?
-
[解決済み] GNU Makefile の変数割り当て =, ?=, :=, += の違いは何ですか?
-
[解決済み] makefile の記号 $@ と $< はどういう意味ですか?
-
[解決済み】makefileに'cd'コマンドを記述するには?
-
[解決済み】gcc makefileのエラー。"No rule to make target ..." (ターゲットにするルールがありません)
-
[解決済み】makefileでターゲットのリストを取得する方法とは?
-
[解決済み] ってなんですか?(アットマークコロン)はMakefileの中でどういう意味ですか?
-
[解決済み] 変数が設定されていない場合、makefileを中断させるには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Makeエラー:セパレータがない
-
[解決済み】Makefileにループを書くには?
-
[解決済み] CygwinでのMakefile
-
[解決済み] 「複数のターゲットパターン」Makefile のエラー
-
[解決済み] Make: LDLIBS, 非推奨?
-
[解決済み】OSがmakefileを検出する
-
[解決済み】makefileでターゲットのリストを取得する方法とは?
-
[解決済み] CLionでCMakeの代わりにローカルのmakefileを使用する
-
[解決済み] GNU MakeのCPPFLAGSとCXXFLAGSの違いについて
-
[解決済み] Makefileの:=と=の違いは何ですか?