だから、メイクファイルを理解しようとしています。現時点では、多かれ少なかれ互いに依存していないいくつかのモジュールを含むプロジェクトがあります。
私のディレクトリツリーは次のようなものです:
root/
- Source/ <-- referenced as $(INPUTPATH)
- Build/ <-- referenced as $(BUILDPATH)
- Release/ <-- referenced as $(OUTPUTPATH)
- Makefile
ソース ( .cpp/ .h) を Source/ に、オブジェクトを Build/ に、実行可能ファイルを Release/*に配置したいと考えています。
したがって、私の考えは、いくつかの異なるターゲットを持ち、次のように使用することでした:
all: maps auxiliars methods
@echo "linking...";\
$(CC) $(CFLAGS) $(OBJS) $(CLIBS) -o ${OUTPUTPATH}/MainProgram
dependency1: $(INPUTPATH)/foo.cpp
@echo "compiling ArbPrecision...";\
cd ${BUILDPATH};\
$(CC) $(CFLAGS) $(CINCLUDE) -c ../$?
dependency2: dependency1 $(INPUTPATH)/bar.cpp
@echo "compiling saddleConstructor...";\
cd ${BUILDPATH};\
$(CC) $(CFLAGS) $(CINCLUDE) -c ../$(INPUTPATH)/bar.cpp
maps: dependency2 $(INPUTPATH)/*Map.cpp
@echo "compiling maps...";\
cd ${BUILDPATH};\
$(CC) $(CFLAGS) $(CINCLUDE) -c ../$(INPUTPATH)/*Map.cpp
... (auxiliars and methods)
$CINCLUDE と CFLAGS は、ヘッダーや外部ライブラリのような単なるコンパイラ関連のものです。
すべてがほぼ完璧に機能します。すべてのターゲットで、他のターゲットの依存関係と、ソースの *cpp を要求します。これが存在しない場合は、ターゲットを呼び出して *cpp をコンパイルします。実行可能ファイルはエラーなしで作成されます。
ただし、「make」を 2 回呼び出すと、ソースに変更を加えなくても、コンパイルにかかる時間は 1 回目と 2 回目で同じになります。したがって、明らかに、依存関係を正しく設定していません。
このコンパイルを実行するための正しい方向を教えてくれる人はいますか? 私は何か間違ったことをしていて、それが何であるかを理解していません。
ありがとう、ホルヘ