■
gccのMオプションで依存関係を自動的に作ってくれるので、
%.d: %.c $(CC) -MM -MF $@ -MP -MT $(subst .d,.o,$@) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) $<
こんな感じにしておくと、Cソースから依存関係を作れて便利。
VPATHを使うと、ターゲットや必須項目を探すときの起点となるディレクトリを追加できて便利。(デフォルトはカレントのみ)
Qtで自動生成されるMakefileをプロジェクトで作っているMakefileと統合するのに苦悩中。
proj/ + app1/ + Makefile | + cファイル + app2/ + Makefile | + cファイル + qapp/ + Makefile | + cファイル + inc/ + hファイル + Makefile
のような感じにして、トップディレクトリから、make app1とかmake app2とかはapp1,app2にそれぞれうまく動くMakefileを作ったあと、トップのMakefileから
apps : app1 app2 .PHONY: all $(apps) all: $(apps) $(apps): $(MAKE) --directory=$@ $(TARGET)
のような感じで問題なく動く。(TARGETはcleanターゲット用、トップからはmake TARGET=clean)qappのMakefileは、
target := sources := listfile := $(target).ls projfile := $(target).pro makfile := $(target).mak .PHONY: all all: #存在しないときに1回だけ実行 $(makfile): $(projfile) @echo "checking $@" @if [ -e $@ ];\ then\ true;\ else\ echo "creating $@";\ qmake -o $@ $<;\ fi
- include $(makfile)
こんな感じで、ファイルリストが更新されたら.proと.makを作り直して、.makをインクルードすることで、必要なもの以外のルールはqmakeで自動生成する.makにまかせるようにしたい。こいつは単体でも、.makで定義される、.mak,cleanのルールとバッティングして警告でるし、incの依存関係がうまくいってない。ただ単体ではビルドそのものは可能。トップディレクトリはビルドはできるがcleanがうまくいかない。現在保留中。