私は再帰的な(有毒だが問題ではない)makeに基づくビルドシステムをやっています。私が抱えている主な問題は、*o ファイルに変更がなくても、make が指示したライブラリを再作成することです。
これは、静的ライブラリの作成を処理するメイクファイルのセクションです。
all: $(DEPS) $(OBJS) $(LIB_TARGET)
### Archive into a library file (.a)
%.a: $(OBJS)
@echo $(MSG_L)
@echo 'Adding $< to library $@'
$(AR) $(ARFLAGS) $(LIB_DIR)/$@ $^
@echo $(MSG_L)
それぞれの makefile の特定のディレクトリの下で、$(LIB_TARGET) はライブラリ名で定義され、各サブディレクトリは接頭辞 makefile を使用して共有の作成方法を認識します。今私の最大の問題は、最初の実行ではすべてを作成するのが普通ですが、2回目の実行、またはコード内の何も変更せずにその後のすべての実行では、ライブラリが再作成されることです(*dまたは*oファイルではなく、それらはそうではありません)再作成され、削除されず、タイムスタンプが変更されません。これは正常です)。
make -C modules all
make[3]: Entering directory `F:/automata/tmp/remake/src/modules'
make -C interface all
make[4]: Entering directory `F:/automata/tmp/remake/src/modules/interface'
make -C cli all
make[5]: Entering directory `F:/automata/tmp/remake/src/modules/interface/cli'
------- make Lib -------
Adding cli.o to library libInterface.a
avr-ar rcs F:/automata/tmp/remake//tmp/app/brick/lib/atmega328p/libInterface.a c
li.o
------- make Lib -------
注: これは 2 回目または 3 回目の実行によるものです。ここでは、*d と *o が再作成されていないことがわかります。
ファイルを使用するルールを作成しましたが、唯一の問題は、ライブラリをソースを取得するディレクトリと同じではなく、特別なディレクトリに配置したことです。これを解決し、システムがライブラリを再作成しないようにする方法についてのアイデアはありますか?
ありがとうございました。