0

GNU Make 3.81 の使用

私が得ているエラーは次のとおりです。

make: 「unittest/build/xlineunittestrunner」で必要なターゲット「unittest/build/inMessages.o」を作成するルールがありません。止まる。

私はmakefileに次のように書かれたターゲットを持っています:

$(BUILDDIR)/%.o: %.c
  $(CC) $(INCLUDES) $(DEFINES) -c $< -o $@

%(in $(BUILDDIR)/%.o: %.c) をに置き換えるとinMessages、機能します。%が一致しない理由がわかりませんinMessages

編集:

問題は、.o ファイルに一致する他のルールがあることではないと思います。makefile のルールの完全なリストは次のとおりです。

all: printinfo checkdirs $(BUILDDIR)/xlineunittestrunner

printinfo:
  @echo "SRCS = $(SRCS)" 
  @echo "OBJ  = $(OBJ)"
  @echo "SOURCEDIRS = $(SOURCEDIRS)" 
  @echo "OBJECTS    = $(OBJECTS)"
  @echo "OBJECTSTOBUILD = $(OBJECTSTOBUILD)"
  @echo "BUILDDIR = $(BUILDDIR)"  

$(BUILDDIR)/xlineunittestrunner: $(OBJECTSTOBUILD)
  $(CC) -o $@ -c $^

$(BUILDDIR)/%.o: %.c
  $(CC) $(INCLUDES) $(DEFINES) -c $< -o $@

checkdirs: $(BUILDDIR)

$(BUILDDIR):
  @mkdir -p $@
4

3 に答える 3

0

うーん。問題は、sourcedirs を VPATH に追加する際の (余分な文字) タイプミスでした。パターン マッチングは機能していましたが、ソース コード ファイルが見つかりませんでした。

于 2012-09-26T15:35:19.517 に答える
0

以下の変更を行うと動作します

%.o: %.c:

      $(CC) $(INCLUDES) $(DEFINES) -c $< -o $(BUILDDIR)/$@

ロジックは $(BUILDDIR)/%.o と $(BUILDDIR)/$@ です。

ターゲットを変更できない場合は、レシピを変更してください:)

于 2013-09-16T05:48:05.470 に答える
0

これを置き換える%inMessages、暗黙的なパターン ルールが明示的なルールに変わります。明示的なルールは、暗黙的なパターン ルールよりも優先されます。を生成する別のパターン ルールがあるに違いありません%.o

make を実行してみて、-d -pどのルールが一致するかを確認します。また-r、組み込みの暗黙的なパターン ルールを使用しない場合は、スイッチを使用して無効にすることもできます。

于 2012-09-26T09:21:41.057 に答える