2016-12-09 4 views
0

여러 모듈 각각은 자체 테스트 _ $ (MODULE) .c로 독립적으로 테스트됩니다. 공유 라이브러리가 적용되지 않은 모듈을 포함하는 $ (LIBRARY)로 생성되었습니다. $ (basename $ <) .o는 $ (LIBRARY)에서 하나를 대체해야합니다. 웬일인지, 그들이 오버라이드되지 않는 것처럼 나는 결과를 얻는다. 누군가 이것을 검토하고 수정 사항에 대한 제안을 할 수 있습니까? 현재 나는 다섯 가지 객체 각각에 대해 비 generic gcov 규칙을 가지고 있습니다. 이 gcov는 올바르게 작동합니다. 아래에서는 일반 규칙과 규칙의 특정 용도를 보여줍니다. 사람/고효율 고품질의 유니 코드 렉싱에 협력하고 공유 라이브러리를 개발하여 지원을 구문 분석에 관심이 있다면이 복잡한 일반 Makefile 규칙은 어떻게 구성되어 있습니까

SHARED_OPTS=-O0 -Wall -Wextra -fPIC 
GOPTS=$(SHARED_OPTS) -g -coverage -pg 

%.gcov : % 
    @echo "\[email protected] generic (needs work)" 
    @-gcc $(GOPTS) -c -o test_$(basename $<).o test_$< 
    @-gcc $(GOPTS) -c -o  $(basename $<).o  $< 
    @-gcc $(GOPTS) -o gcov_test_$(basename $<) \ 
     test_$(basename $<).o \ 
     $(basename $<).o \ 
     -L . -l $(LIBRARY) 
    @-./gcov_test_$(basename $<) 
    @-gcov $< >[email protected] 2>&1 
    @echo "no Mac gprof: -gprof gcov_test_$(basename $<) gmon.out > $<.prof" 
    @$(call timestamp,[email protected]) 

Unicode.c.gcov: Unicode.c 

, 나는 검토 또는 기여자을 가지고 싶어요.

위 메이크 단편은 GitHub의 저장소에의 C : 서브 디렉토리 아래 구체적

https://github.com/jlettvin/Unicode.

답변

0

메이크 파일에서 문제를 찾으려고 할 때 @을 사용하지 않는 것이 좋습니다. 명령 줄을 숨겨서 문제를 볼 수 없기 때문입니다. 또한 여기 -을 피해야합니다. 그 명령 중 하나라도 실패하면 확실히 나머지 레서피를 계속 실행하고 싶지는 않을 것입니다.

그것은 잘라 내기/붙여 넣기 문제인지 모르겠어요하지만이 라인은, 적어도 잘못 있다고 가정해야 :

@-gcc $(GOPTS) -c -o test_$(basename $<).o test_$< 
@-gcc $(GOPTS) -c -o  $(basename $<).o  $< 

를 지금까지 내가 당신의 메이크에서 마지막을 말할 수있는 이 행의 단어는 각각 test_$<.c$<.c이어야합니다.

+0

의견에 감사드립니다. 이 두 줄의 $ <> 값은 ".c"로 끝납니다. 이 줄들은 일반적인 규칙이 아닌 특정 규칙에서 작동한다는 것을 기억하십시오. 나는 어떤 객체의 구성에 의해보고 된 오류가 거의 없으며, 모듈의 상호 의존성은이 시점에서 매우 드물다. '-'를 사용하면 모든 컴파일 동안 모든 객체에 대해 모든 오류 (보통 없음)를 볼 수 있다는 것을 의미한다. 그럼에도 불구하고, 지금 당장 당신의 충고를 따를 것입니다. 해결하려는 실제 문제는 다른 곳에 있습니다. 이 이름 지정을 통해 gcov 용으로 인스트루먼트 된 .o 파일은 최적화 된 .o 라이브러리 파일과 공존 할 수 있습니다. – jlettvin