2017-06-21 53 views
-1

メイクファイルで正規表現を理解していません手段?私は、私は次の行を持っているメイクファイルを、持っている

また、srcディレクトリに20個のうち4つのファイルしか必要としないというルールはありますか?

+3

何reqular表現 –

+0

私の推測ではありませんルールがないmakeため

%.o: %.c $(CC) $(CFLAGS) -c [email protected] $< 

または、異なる拡張子のCファイルと同じ名前のOファイルにコンパイルします。 – tilz0R

+0

私はこのことが実際にはうまくいきません。 '$ *'はパターンで '%'とマッチしたものですが、このルールには '%'はありません。 – aragaer

答えて

1

.c.o:.cで終わるすべてのファイルに一致し、同じ名前を定義する簡単なパターンルールを宣言したが、ターゲットとして.oと。

$*は、自動make変数であり、パターンの一致部分に展開されます。 main.cと一致した場合、$*mainとなります。

$<は、最初の前提条件の名前を含む自動作成変数です(したがって、たとえばmain.c)。 :xx=yyでは、makeの変数の最後にある文字列を置き換えることができるので、${<:.c=.o}main.cmain.oに変換します。


説明したように、構文は奇妙で不要です。そのようなルールを記述するための標準的な方法は、次のとおりです。すべてのCファイルをつかむ:パターンのこの種は、

.SUFFIXES: .c .o 

.c.o: 
    $(CC) $(CFLAGS) -c [email protected] $< 
+0

私の質問:srcディレクトリに20個のファイル* .cがありますが、makefileは4個のファイルsec2dte_mq.c、sec2dte_2ici.c、adt.c、dte_mq.cのみをコンパイルする必要があります。他の人の中でどのようにそれらを見つけることができますか?それはすべてをコンパイルし、必要な独立性を持たないものです。 – SamOl

+1

これはあなたが示したルールとは関係ありません。4つのファイルだけが必要な場合は、おそらくこれらの4つのオブジェクトファイルをリンクするルールがあります。 'make'は、最終目標を達成するために必要なことをすることです。他の '.o'ファイルに依存するものがなければ、' make'は一致する前提条件を見つけたという理由だけでこのルールを適用しません。 –

+0

、完全なメイクファイルを投稿するために投稿を更新します。ここで説明した4つのファイルはどこにあるのか説明してください。 – SamOl

関連する問題