1

私はメイクファイルの使用に少し初心者であり、2 つの異なるディレクトリ (私の場合はカーネルとドライバーと呼ばれる) からの入力を受け入れ、オブジェクト ファイルを別のディレクトリ (tmp と呼ばれる) に出力する gcc のメイクファイルを作成しようとしています。 ) ワイルドカードを使用します。

入力ファイルと出力ファイルの名前を取得するためにこのコードを書きました

C_SOURCES = $(wildcard $(KERNEL_DIR)/*.c $(DRIVERS_DIR)/*.c)

#Creating a list for object files names
C_OBJ = $(C_SOURCES:.c=.o)

そして、私は次のルールを使用しています

%.o: %.c $(CC) $(CFLAGS) -c $< -o $@

しかし、目的のディレクトリにオブジェクトファイルを出力できません.files

4

2 に答える 2

2

この例のようなものがあなたのためにそれをするはずです。読みやすくするために少し分けていますが、お分かりいただけると思います。

KERNEL_SOURCES = $(wildcard $(KERNEL_DIR)/*.c)
DRIVER_SOURCES = $(wildcard $(DRIVER_DIR)/*.c)

OBJECTS =  $(patsubst $(KERNEL_DIR)/%.c,tmp/%.o,$(KERNEL_SOURCES))
OBJECTS += $(patsubst $(DRIVER_DIR)/%.c,tmp/%.o,$(DRIVER_SOURCES))

KERNEL_DIRDRIVER_DIR!の両方で同じ名前のソース ファイルに注意してください。

于 2013-04-27T17:36:06.623 に答える