これを行うにはさまざまな方法がありますが、私は、メイクファイルをプロジェクトと共に成長させないことから始めます。代わりに私は規則的な構造を使用して、1つのディレクトリ内の1つのコードファイル、たくさんのファイルを持つ大きなプロジェクト、というプロジェクトを処理するルールを定義します。
# we nead the header directory
INCDIRS = src
# collect every cpp file
CXXSRCS = $(shell find src/ -type f -name '*.cpp' 2>/dev/null)
# now generate the object file names
OBJSTMP = $(CXXSRCS:%.cpp=obj/%.o)
# compiled the source file
obj/%.o: src/%.cpp
$(CXX) ${CXXFLAGS} $(foreach bin,${INCDIRS},-I${bin}) -o "[email protected]" "$<"
は今、あなたのmain
がpart1.cpp
であると言うことができます::
例えば
は(テストしていないいくつかの誤植を持っていると私はあなたがプロジェクトディレクトリから作る始めると仮定かもしれません)あなたの構造を少し再生することができます
.PHONY: clean all
all: install
compile: ${OBJS}
package: compile ${executable}
#now we can move the object files to were they should be
mv -f obj/part*/* obj/
install: package
:
ifneq (,$(wildcard src/part1/part1.cpp))
# I just dont like a.out...
executable=${APPLICATION_NAME}
# now lets build the exe:
${executable}: ${OBJS}
$(LD) $(LDFLAGS) -o [email protected] $^
endif
は今、最後は少し化粧品です
あなたのプロジェクトがどれほど大きくても、このメイクファイルはいくつかのステップを実行します。あなたの考えを伝えるだけです。私はtest_filesを無視しました。しかし、先に考えてみると、通常の情報源と同じようにテストソースを収集することができます。
だから、私のポイントは、あなたのメイクファイルのみがその複雑で、あなたのプロジェクトのサイズと一緒に成長していない理由は絶対にありません。
詳細については、...のmakefileのためのたくさんの情報があり、ここにStackOverflowのドキュメントで見て助け
希望、
甲斐
あなたは依存関係の自動処理を使用しますか?もしそうなら、依存ファイル(例えば 'part5.d')をどこに行きたいのですか? – Beta
私はそれらを一度も使用していません。私は彼らがどのように働くのか分かりません。彼らは必要ですか? – Sandles
いいえ、彼らは、Makeが自動的に巧妙なことをするための高度な技です。それらがなければ、あなたは手でそれらを世話しなければならないか、それらなしでする必要があります。 – Beta