2

src/からソースを選択しinc/からヘッダーを選択するmakefileを書き込もうとしています。

〜/ Linuz / src:1.c、2.c、3.c..。

〜/ Linuz / inc:abc.h、dyz.h

で利用できるはずのmakefileを作成するのを手伝ってください

〜/ Linuz / some_other_dir / Makefile

PS:私のLinuxマシン用にコンパイルしようとしています。

ご提案ありがとうございます。

4

1 に答える 1

5
all: my_program

%.o: ../src/%.c
    $(CC) $(CFLAGS) -I../inc/ -c -o $@ $^

my_program: 1.o 2.o 3.o 
    $(CC) $(LDFLAGS) -o $@ $^

clean:
    rm -f *.o my_program

Makefile を~/Linuz/some_other_dir/に置く場合、次のルール

%.o: ../src/%.c

../src/フォルダー ( ~/Linuz/src/ )から c ファイルを取得し、Makefile の同じフォルダーにオブジェクト (*.o) ファイルを作成します。

この-I../inc/オプションは、makefile が../inc/フォルダー ( ~/Linuz/inc/ ) からヘッダー ファイルを取得できることを意味します。

この規則は、makefile がオブジェクト ファイルからmy_program: 1.o 2.o 3.oMakefile と同じディレクトリにバイナリを作成することを意味します。1.o2.o3.o

メイクマニュアルから:

$^ すべての前提条件の名前 (間にスペースを含む)。アーカイブ メンバーである前提条件の場合、指定されたメンバーのみが使用されます (アーカイブを参照)。ターゲットは、各ファイルが前提条件として何回リストされていても、依存する他の各ファイルに対する前提条件を 1 つだけ持っています。したがって、ターゲットの前提条件を複数回リストすると、$^ の値には名前のコピーが 1 つだけ含まれます。このリストには、注文のみの前提条件は含まれていません。それらについては、`$|' を参照してください。変数、以下。

$@ ルールのターゲットのファイル名。ターゲットがアーカイブ メンバーの場合、'$@' はアーカイブ ファイルの名前です。複数のターゲットを持つパターン ルール (「パターン ルールの紹介」を参照) では、「$@」は、ルールのレシピを実行させたターゲットの名前です。

于 2013-03-18T11:18:25.417 に答える