2010-07-24 5 views
10

gmake 또는 gcc인지 잘 모르겠다.종속 파일 삭제하기

내가 사용하고있는 단위 테스트 프레임 워크에 대한 종속성 규칙을 생성하기 위해 -MM 및 -MD 옵션을 사용하고 있습니다. 특히 모든 바이너리가 (제대로) 연결 후

$(TEST_OBJ_DIR)/%.d: $(TEST_SRC_DIR)/%.cpp 
    @$(CPPC) -MM -MD $< -o [email protected] 
    @sed -i -e 's|\(.*\)\.o:|$(OBJ_DIR)/\1.o $(TEST_OBJ_DIR)/\1.d $(TEST_OBJ_DIR)/\1.o:|' [email protected] 

-include $(TEST_DEP_FILES) 

내가 make 실행, 나는 다음과 같은 추가 (원인 불명) 라인 전에 어디서부터

rm test/obj/dice.d test/obj/regex.o test/obj/inventoryContainer.d test/obj/color-string.d test/obj/dice.o test/obj/inventoryContainer.o test/obj/color-string.o test/obj/regex.d 

rm 명령오고 있다는 것이다 종료을 참조하십시오? 유일한 장소 - 어디 - 내가 가진 것을 내 메이크의 rm 명령은 깨끗한 지침

test-clean: 
    rm -f $(TEST_BIN_FILES) 
    rm -f $(TEST_OBJ_DIR)/*.{a,d,o} 

어떤 아이디어에?

답변

10

make는 자동으로 두 개의 규칙을 연결하는 데 필요한 경우 intermediate files을 만들지 만 빌드가 끝나면 삭제합니다. 당신이 그들을 제거하는 것을 방지하기 위해 .PRECIOUS 특별 대상을 사용할 수 있습니다

+1

또는 .SECONDARY ... – reinierpost

+0

@rei 아, 네. 나는'.SECONDARY'이 파일을 중간체로 취급하도록 강요했음을 알고 있었지만 삭제를 중단했다는 것을 깨닫지 못했습니다. –

0

문제 이런 종류의 디버깅을위한 하나의 유용한 옵션은 -n 스위치 : 그것은 당신에게이 실행됩니다 명령 만 원이 표시됩니다

make -n {TARGET} 

실제로 그들을 실행하지 않습니다. 이렇게하면 발사하는 규칙을 볼 수는 있지만 문제를 진단하기가 힘든 추가 출력을 모두 제공하지는 않습니다.

-d 디버그 플래그는 유용 할 수 있지만 쉽게 스크롤 할 수있는 컨텍스트에서 실행하면 많은 양의 출력이 발생합니다. 나는 일반적으로 emacs 쉘 ​​모드를 사용하는데, 이는 좋은 검색 기능을 가지고 있고 버퍼를 저장하기 때문이다.