0

lib (たとえばmylib) と 2 つの実行可能ファイルがあり、そのうちの 1 つ (たとえばexe1) は lib に依存しています。ファイルシステムには次のものがあります:

src
   Makefile
   ...
   lib
     mylib
       Makefile
       ...
   exe1
     Makefile
     ...
   exe2
     Makefile
     ...

そしてdirで起動することmakeですべてが構築されます。src

Makefileソース内:

EXE=exe1 exe2
LIB=mylib

all: $(LIB) $(EXE)

.PHONY: $(LIB) $(EXE)

$(LIB):
    $(MAKE) -C lib/$@

$(EXE): $(LIB)
    $(MAKE) -C $@

たとえば、Makefileforexe1は次のとおりです。

...
all: exe1 copy

exe1: exe1.o
    $(CC) $(CFLAGS) $(OBJ) $(LDFLAGS) -o $@

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

私の問題は、ディレクトリ内のファイルを変更するとmylib、ライブラリは正しく再構築されますが、exe1明らかにそうではありません... の依存関係を指定せずに、以前の呼び出しで指定されたターゲット (mylib) に依存していることを確認する方法はありmakeますexe1かのファイルmakemylibexe1 Makefile

皆さん、ありがとうございました。

4

1 に答える 1

1

@tripleee と @JackKelly (彼の名前を呪う) は正しく、これは健全な makefile システムではありません。

変更することで、必要なもののようなものを得ることができますsrc/Makefile:

EXE=exe1 exe2
LIB=lib/mylib/mylib

all: $(LIB) $(EXE)

.PHONY: $(EXE)

$(LIB):
    $(MAKE) -C lib/mylib

exe1: $(LIB)

$(EXE):
    $(MAKE) -C $@

常に再構築exe1/makefileするように変更します:exe1

.PHONY: exe1

これにはまだ多くの問題がありますが、少なくともMake in を実行するlib/mylib/mylibと正しく再構築されます。( Make in を実行すると動作しません。)src/exe1/exe1srcsrc/exe1/

于 2012-08-29T03:46:56.103 に答える