我已经开始为一个库编写几个简单的测试。我目前正在尝试编写一个名为的 make 目标,该目标btests
应该将它们全部编译。
tests/
测试以库中的简单.cpp
文件的形式驻留在目录中#include
。
makefile 的任务很简单:将每个文件编译tests/name.cpp
成tests/name
与库链接的可执行文件。
它工作正常,除了一件事:每次我运行时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)
仅当某些内容发生更改时,我如何才能强制重新编译?