ファイルがあるとしましょう:
ライブラリ:
- one.cpp、one.h
- 2.cpp、2.h
- three.cpp、three.h
プログラム:
- プログラム.cpp
最後のコンパイルから変更された *.cpp のみをコンパイルする Makefile を作成する方法はありますか?
現在、私はそのようなものを持っています:
SRCS = one.cpp two.cpp three.cpp
OBJS = $(SRCS:.cpp=.o)
all: $(OBJS) program
.cpp.o:
g++ -Wall -c $<
program:
g++ -Wall $(OBJS) program.cpp -o program
clean:
rm -f $(OBJS) program
私は問題なく動作しますが、プログラムをコンパイルしてから two.cpp または two.h を変更すると、最初に「make clean」を実行する必要があります。
Nothing to be done for 'all'.
Makefile をそのように変更したいと思います。変更を認識し、そのファイルとその依存関係を再コンパイルします (one.cpp が変更された two.cpp のコードを使用する場合、両方のファイルを再コンパイルする必要があります)。
したがって、two.cpp を変更すると、make は次のようになります。
g++ -Wall -c two.cpp
g++ -Wall $(OBJS) program.cpp -o program
しかし、one.cpp が変更された two.cpp のコードを使用している場合は、次のようにする必要があります。
g++ -Wall -c one.cpp
g++ -Wall -c two.cpp
g++ -Wall $(OBJS) program.cpp -o program