2013-01-04 6 views
0

나는 라이브러리에 대한 몇 가지 간단한 테스트를 시작했다. 나는 현재 모두를 컴파일하기로되어있는 btests이라는 대상을 작성하려고합니다.수정하지 않고 재구성하기

테스트는 디렉토리에 .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) 

:

이 관련 코드는?

+0

그건 - 그것은 정말 당신이 사용하고있는 하나? –

+1

이 문제는 재현 할 수 없습니다. 이 파일이 여러분이 사용하고있는 makefile이고, 여러 파일의 마지막으로 수정 한 시간을 망쳐 놓을 수있는 다른 것이 없다고 확신합니까? –

+0

글쎄, 나에게 무관 심한 부분을 잘라 냈지만, 그렇지 않은 것 같아. 전체 메이크 파일을 추가하겠습니다. – corazza

답변

1

테스트 결과는 all에 달려 있습니다. "all"이라는 파일이 없으므로 Make는 다시 빌드해야한다는 결론을 내리고 그에 의존하는 테스트도 수행해야합니다.

수정 사항은 간단합니다. all에 대한 규칙은 그래서 그냥 중개인을 잘라, 아무것도하지 않습니다하지만 libname.a이 필요합니다 메이크 잘 보이는

$(TESTS) : % : %.cpp libname.a 
    $(CC) $(CFLAGS) $< -L. -lname -o [email protected] 
+0

정말 고마워. 고마워. – corazza

관련 문제