2013-08-30 2 views
0

메이크 파일로 프로젝트의 문서를 자동으로 만들고 싶습니다. 또한 대상 문서 (및 변수 DOC_DIRECTORY = ../doc)를 작성하여 설명서의 디렉토리를 지정하십시오. 내 doxygen 파일에서 ../doc/ 디렉토리에 로그 파일 이름 "doxyLog.log"를 추가했습니다.메이크 파일 중에 체크 오류가 발생했습니다.

가 여기 내 목표 정의입니다 :

#Creation of the Doxygen documentation 
doc: $(DOC_DIRECTORY)/path_finder_doc 
    doxygen $(DOC_DIRECTORY)/path_finder_doc 
    @echo $(shell test -s ../doc/doxyLog.log; echo $$?) 
ifeq ($(shell test -s ../doc/doxyLog.log; echo $$?),1) 
    @echo "Generation of the doxygen documentation done" 
else 
    @echo "Error during the creation of the documentation, please check $(DOC_DIRECTORY)/doxyLog.log" 
endif 

내 검사가 작동하는지 테스트하려면, 내가 수동으로 문서의 오류 (\ retufjdkshrn 대신 \ 리턴 같은 잘못된 명령)을 소개합니다. 나는 make doc 시작할 때,이 오류가 나타납니다 시간 후 :

먼저 메이크업의 문서 (doc 후 오류로) ->

둘째 메이크업의 문서를 수행 한 doxygen이 문서의 생성 (항상 문서의 오류) -> 설명서 작성 중 오류가 발생했습니다 ./doc/doxyLog.log를 확인하십시오.

왜 나를 도와 줄 수 있습니까?

답변

2

여기에는 두 가지 문제가있는 것처럼 보입니다. 따라서이 답변의 일부는 추측이되어야합니다.

첫째 : 파일이 하지이 존재하는 경우 파일이 1을 존재 해,

ifeq ($(shell test -s ../doc/doxyLog.log; echo $$?),1) 
    @echo "Generation of the doxygen documentation done" 

내가 test을 알고있는 것처럼, 그것은 0를 반환합니다. 나는 당신이 makefile에 넣기 전에 이것을 테스트하지 않았다고 생각합니다. 둘째

, 당신은 명령을 확인 와 명령쉘을 혼동하고 있습니다. 이 :

ifeq ($(shell test -s ../doc/doxyLog.log; echo $$?),1) 
    @echo "Generation of the doxygen documentation done" 
else 
    @echo "Error..." 
endif 

조건부 확인합니다. make는 규칙을 실행하기 전에 평가할 것입니다. 로그 파일이 아직 존재하지 않기 때문에 1 (먼저를 참조) shell 명령은 조건이 true로 평가하고이 규칙 의 일부가 될 것입니다 전체 if-then-else

@echo "Generation of the doxygen documentation done" 

될 것이다, 반환 규칙이 실행되기 전에. 다음 패스에서 파일이 이미 존재의 shell 명령이 리턴 0과 문은 이상한 결과를 얻고있는 이유는 설명

@echo "Error..." 

된다. 당신은 그냥 만들어졌다 시도의 결과에 대한 보고서를 확인하려면

, 당신은 규칙에 명령에 조건 을 넣어해야합니다

doc: $(DOC_DIRECTORY)/path_finder_doc 
    doxygen $(DOC_DIRECTORY)/path_finder_doc 
    @if [ -s ../doc/doxyLog.log ]; then echo Log done; else echo error...; fi 
+0

좋아, 나는 우리가 할 수있는 것을 몰랐다 조건부로 만들기.파일이 비어 있는지 확인합니다. Make 설명서 (https://www.gnu.org/software/make/manual/html_node/Conditional-Example.html)의 예 때문에이 구문을이 조건으로 사용했습니다. – LLenain

+0

흠, 제 경우와 일치하도록'@if [! -s ../doc/doxyLog.log];'오류가있는 경우 파일이 비어 있기 때문입니다. 그러나 이것은 세부 사항입니다. – LLenain

관련 문제