0
私のMakefileは次のようになります。いくつかのターゲット
MODULES = core models pages admin
CMXSFILES = $(patsubst %,%.cmxs,$(MODULES))
all : $(CMXSFILES)
core.cmxs : core
make -C $< ../[email protected]
models.cmxs : models core.cmxs
make -C $< ../[email protected]
pages.cmxs : pages core.cmxs models.cmxs
make -C $< ../[email protected]
admin.cmxs : admin core.cmxs models.cmxs
make -C $< ../[email protected]
は、ビルドコマンドが正確であることを考えると、より簡潔な方法で最後の4つのルールを表現する方法ですが同じ?
このような何か:
core.cmxs: core
models.cmxs: models core.cmxs
pages.cmxs: pages core.cmxs models.cmxs
admin.cmxs: admin core.cmxs models.cmxs
make -C $< ../[email protected]
をああ素敵な、私は」didnの依存関係とルールを個別に指定できることはわかっています。私はディレクトリをPHONYとして置くことについてよく分かりませんが、ディレクトリを依存関係として置くので、少なくとも1つのファイルが変更されたときに、make再コンパイルモジュールが変更されます。私はとにかくそれを撃つだろう。 $(MAKE)のトリックに感謝します! :-) –
ディレクトリのタイムスタンプは、ファイルが変更されても変更されません。これはよくある誤解です。ディレクトリのタイムスタンプは、_directoryの内容が変更されたときに変更されます。ファイルが追加、削除、または名前変更されたときはいつでも...ただし、既存のファイルが更新されたときは変更されません。そのディレクトリ内のファイルを更新するために使用するプロセスによって、常にディレクトリが副作用として変更される可能性があります。エディタは一時ファイルなどを作成します。しかし、既存の 'foo'ファイルに' echo hi >> foo'を使うだけで、ディレクトリの変更時刻は変わりません。 – MadScientist
ありがとうございます。あなたは確かに今まで推測していたように、私はMakefileに慣れていません:D makeが '$(MAKE)-B -C $ <../[email protected] 'を使ってディレクトリを再帰的に通過するように強制するのは良い方法ですか?サブディレクトリの数は比較的少なく、ファイルをどこかに変更するたびに 'make clean && all 'を省くことができれば、そのような小さな時間の損失は気にしません。 –