簡単にするために、次のフォルダーがあるとします。
./src/
多くの .c ファイル./obj/
多くの .obj ファイル./output/
ビルドしたいバイナリで
私のメイクファイルは次のとおりです。
all: init mybin
# init commands
init:
mkdir obj
mkdir output
mybin: project1 project2 project3
$(CC) src/misc.c ... etc
$(LK) obj/first.obj obj/second.obj obj/third.obj obj/four.obj obj/five.obj obj/six.obj obj/seven.obj obj/eight.obj obj/nine.obj -o output/myapp.bin
project1: obj/first.obj obj/second.obj obj/third.obj
obj/first.obj: src/first.c
$(CC) first.c ... etc
obj/second.obj: src/second.c
$(CC) obj/second.c ... etc
obj/third.obj: src/third.c
$(CC) obj/third.c ... etc
project2: obj/four.obj obj/five.obj obj/six.obj
obj/four.obj: src/four.c
$(CC) four.c ... etc
obj/five.obj: src/five.c
$(CC) obj/five.c ... etc
obj/six.obj: src/six.c
$(CC) obj/six.c ... etc
project3: obj/seven.obj obj/eight.obj obj/nine.obj
obj/seven.obj: src/seven.c
$(CC) seven.c ... etc
obj/eight.obj: src/eight.c
$(CC) obj/eight.c ... etc
obj/nine.obj: src/nine.c
$(CC) obj/nine.c ... etc
初めて実行したときmake all
、コンパイルされたすべてが見つかりました。それから私はしました:
$ touch src/four.c
$ make all
$
しかし、make
何もコンパイルせずに終了します。.c ファイルの 1 つが変更されたことは検出されなかったと思いますが、依存関係の何が問題なのかわかりません。
私が期待したこと:
touch
ingは古いものとしてsrc/four.c
マークされているはずであり、したがって、古いものとしてもマークされているはずです。このチェーンは、to の新しいコンパイルをトリガーし、プロジェクト全体の新しいリンケージをトリガーする必要があります。obj/four.obj
project2
mybin
src/four.c
obj/four.obj