ライブラリの簡単なテストをいくつか書き始めました。私は現在、btests
それらすべてをコンパイルするはずの make ターゲットを作成しようとしています。
テストは、ライブラリが格納されている単純なファイルtests/
の形式でディレクトリに存在します。.cpp
#include
makefile のタスクは単純です。ライブラリにリンクさtests/name.cpp
れた実行可能ファイルにそれぞれをコンパイルします。tests/name
そして、1 つのことを除いて、正常に動作します: を実行するたびにmake btests
、テストが再コンパイルされます。ただし、それらが変更された場合、またはライブラリ自体が変更された場合にのみ再コンパイルする必要があります。
これは関連するコードです:
CC=g++
CFLAGS=-Wall
SRCPATH=source
OBJPATH=object
TESTPATH=tests
OBJ=$(OBJPATH)/nameb.o $(OBJPATH)/hebbann.o
INF=$(SRCPATH)/nameb.hpp $(SRCPATH)/hebbann.hpp
TESTS=$(TESTPATH)/test_api $(TESTPATH)/test_speed
all : libname.a
libname.a : $(OBJ)
ar rvs libname.a $(OBJ)
$(OBJ) : $(OBJPATH)/%.o : $(SRCPATH)/%.cpp $(SRCPATH)/%.hpp
$(CC) $(CFLAGS) -c $< -o $@
btests : $(TESTS)
$(TESTS) : % : %.cpp all
$(CC) $(CFLAGS) $< -L. -lname -o $@
install : all
mkdir -p /usr/include/name
cp $(INF) /usr/include/name
cp libname.a /usr/lib
pack : all
mkdir -p name/
cp $(INF) name/
tar -cvf libname.tar name/ libname.a doc/ source/
clean :
rm -f $(OBJPATH)/* libname.a libname.tar $(TESTS)
何かが変更された場合にのみ make を強制的に再コンパイルするにはどうすればよいですか?