2
BUILT_DIR = /tmp/obj 
SRC = /source/dir  

/tmp/obj/%/builtin.o : $(SRC)/%/*.c
      gcc $^ -o $@

しかし、あなたは知っています :

パターンルールを適用するには、そのターゲットパターンが検討中のファイル名と一致している必要があり、そのすべての前提条件(パターン置換後)は、存在するファイルまたは作成可能なファイルに名前を付ける必要があります。

私が実行するmake /tmp/obj/hfa/builtin.oと、makeは文句を言います:

make: *** No rule to make target/tmp/obj/hfa/builtin.o'。やめて。`

要件を満たすようにMakefileを変更するにはどうすればよいですか?</ p>

4

3 に答える 3

5

二次拡張を使用できます

BUILT_DIR = /tmp/obj 
SRC = /source/dir  
.SECONDEXPANSION:
/tmp/obj/%/builtin.o : $$(wildcard $(SRC)/%/*.c)
      gcc $^ -o $@
于 2013-03-22T06:35:33.390 に答える
0

表示されるエラーは、 が に変換される$(SRC)/hfa/*.cため、パターンに一致する .c ファイルがないことを示しています。したがって、 make は定義したルールを使用できません。%hfa

Make はビルドに暗黙のルールを使用し始めますが、どちらも一致しません。

最後にmakeはあきらめます。

同じ Makefile であることを確認したところ、ディレクトリ*.cにファイルがない場合にのみ同じエラーが発生します。$(SRC)/hfa

そうしないと、gcc コマンドが実行されます。

そして、あなたの質問から、あなたの要件が何であるかは明確ではありません。

于 2013-03-22T05:03:05.053 に答える