2

ディレクトリにソースファイルeven_odd_list.cがありますsrc。これがmakefile私が実験しているものです

VPATH = src include
CPPFLAGS = -I include

even_odd_list:

すべての暗黙のルールを調査するために電話make -pnしましたが、適用できると思われるルールが見つかりません。

私は何が欠けていますか?make が実行している論理フローの説明をいただければ幸いです。

4

2 に答える 2

1

ここで見落とされていたのは、make がターゲットを暗黙のルールに一致させる方法でした。この場合、前提条件は指定されていませんが、ルールの前提条件が存在するか存在する必要があり、作成できる場合、make は暗黙のルールに一致します。一致する暗黙のルールの前提条件が存在し、指定されていない場合、それは暗黙の前提条件と見なされます。

したがって、一致する最初のルールは次のとおりです。

%: %.c
#  commands to execute (built-in):
        $(LINK.c) $^ $(LOADLIBES) $(LDLIBS) -o $@

このページには詳細情報http://www.gnu.org/software/make/manual/html_node/Using-Implicit.htmlがあります。

Usingmake -dは、make が実行しているステップを表示します。この例に関連する出力は次のとおりです。

Updating goal targets....
Considering target file `even_odd_list'.
 File `even_odd_list' does not exist.
 Looking for an implicit rule for `even_odd_list'.
 Trying pattern rule with stem `even_odd_list'.
 Trying implicit prerequisite `even_odd_list.o'.
 Trying pattern rule with stem `even_odd_list'.
 Trying implicit prerequisite `even_odd_list.c'.
 Found prerequisite `even_odd_list.c' as VPATH `src/even_odd_list.c'
 Found an implicit rule for `even_odd_list'.
  Considering target file `even_odd_list.c'.
   Looking for an implicit rule for `even_odd_list.c'.
   Trying pattern rule with stem `even_odd_list'.
   Trying implicit prerequisite `even_odd_list.y'.
   Trying pattern rule with stem `even_odd_list'.
   Trying implicit prerequisite `even_odd_list.l'.
   Trying pattern rule with stem `even_odd_list'.
   Trying implicit prerequisite `even_odd_list.w'.
   Trying pattern rule with stem `even_odd_list'.
   Trying implicit prerequisite `even_odd_list.w'.
   Trying pattern rule with stem `even_odd_list.c'.
   Trying implicit prerequisite `even_odd_list.c,v'.
   Trying pattern rule with stem `even_odd_list.c'.
   Trying implicit prerequisite `RCS/even_odd_list.c,v'.
   Trying pattern rule with stem `even_odd_list.c'.
   Trying implicit prerequisite `RCS/even_odd_list.c'.
   Trying pattern rule with stem `even_odd_list.c'.
   Trying implicit prerequisite `s.even_odd_list.c'.
   Trying pattern rule with stem `even_odd_list.c'.
   Trying implicit prerequisite `SCCS/s.even_odd_list.c'.
   Trying pattern rule with stem `even_odd_list'.
   Trying implicit prerequisite `even_odd_list.y'.
   Looking for a rule with intermediate file `even_odd_list.y'.
    Avoiding implicit rule recursion.
    Trying pattern rule with stem `even_odd_list.y'.
    Trying implicit prerequisite `even_odd_list.y,v'.
    Trying pattern rule with stem `even_odd_list.y'.
    Trying implicit prerequisite `RCS/even_odd_list.y,v'.
    Trying pattern rule with stem `even_odd_list.y'.
    Trying implicit prerequisite `RCS/even_odd_list.y'.
    Trying pattern rule with stem `even_odd_list.y'.
    Trying implicit prerequisite `s.even_odd_list.y'.
    Trying pattern rule with stem `even_odd_list.y'.
    Trying implicit prerequisite `SCCS/s.even_odd_list.y'.
   Trying pattern rule with stem `even_odd_list'.
   Trying implicit prerequisite `even_odd_list.l'.
   Looking for a rule with intermediate file `even_odd_list.l'.
    Avoiding implicit rule recursion.
    Trying pattern rule with stem `even_odd_list.l'.
    Trying implicit prerequisite `even_odd_list.l,v'.
    Trying pattern rule with stem `even_odd_list.l'.
    Trying implicit prerequisite `RCS/even_odd_list.l,v'.
    Trying pattern rule with stem `even_odd_list.l'.
    Trying implicit prerequisite `RCS/even_odd_list.l'.
    Trying pattern rule with stem `even_odd_list.l'.
    Trying implicit prerequisite `s.even_odd_list.l'.
    Trying pattern rule with stem `even_odd_list.l'.
    Trying implicit prerequisite `SCCS/s.even_odd_list.l'.
   Trying pattern rule with stem `even_odd_list'.
   Trying implicit prerequisite `even_odd_list.w'.
   Looking for a rule with intermediate file `even_odd_list.w'.
    Avoiding implicit rule recursion.
    Trying pattern rule with stem `even_odd_list.w'.
    Trying implicit prerequisite `even_odd_list.w,v'.
    Trying pattern rule with stem `even_odd_list.w'.
    Trying implicit prerequisite `RCS/even_odd_list.w,v'.
    Trying pattern rule with stem `even_odd_list.w'.
    Trying implicit prerequisite `RCS/even_odd_list.w'.
    Trying pattern rule with stem `even_odd_list.w'.
    Trying implicit prerequisite `s.even_odd_list.w'.
    Trying pattern rule with stem `even_odd_list.w'.
    Trying implicit prerequisite `SCCS/s.even_odd_list.w'.
   Trying pattern rule with stem `even_odd_list'.
   Rejecting impossible implicit prerequisite `even_odd_list.w'.
   No implicit rule found for `even_odd_list.c'.
   Finished prerequisites of target file `even_odd_list.c'.
  No need to remake target `even_odd_list.c'; using VPATH name `src/even_odd_list.c'.
 Finished prerequisites of target file `even_odd_list'.
Must remake target `even_odd_list'.
cc  -I include   src/even_odd_list.c   -o even_odd_list
Putting child 0x085fbe90 (even_odd_list) PID 24853 on the chain.
Live child 0x085fbe90 (even_odd_list) PID 24853 
Reaping winning child 0x085fbe90 PID 24853 
Removing child 0x085fbe90 PID 24853 from chain.
Successfully remade target file `even_odd_list'.
于 2013-10-20T21:57:10.573 に答える