我已經開始爲一個庫編寫幾個簡單的測試。我目前正試圖編寫一個名爲btests
的make目標,它應該編譯所有目標。不做任何修改就重建
該測試駐留在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 [email protected]
btests : $(TESTS)
$(TESTS) : % : %.cpp all
$(CC) $(CFLAGS) $< -L. -lname -o [email protected]
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)
我如何可以強制讓只有當事情已經改變,重新編譯?
那makefile文件看起來很好 - 真的是你正在使用的一個? –
我無法重現此問題;你確定這是你正在使用的makefile,並且沒有其他的東西可能會混淆各種文件的最後修改時間嗎? –
我修剪掉了一些與我無關的部分,但我想他們不是。我將添加整個makefile。 – corazza