2011-07-29 3 views
3

C로 작성되고 automake/autoconf를 사용하여 빌드 된 프로그램이 있으며 두 개의 테스트 스위트가 있습니다. 하나는 C로 쓰여진 단위 테스트 모음이다. 다른 하나는 종단 간이며 (현재) 파이썬으로 작성되었습니다. 나는 단위 테스트를 항상 실행하기위한 "make check"와 파이썬이 설치된 경우에만 end-to-end 테스트를 원한다. 이것은 내가 지금 무엇을 가지고 :Python을 사용할 수있는 경우 테스트 프로그램을 선택적으로 활성화합니다. - automake

TESTS = unittests 
if HAVE_PYTHON 
TESTS += tester.py 
tester_py_SOURCES = src/test/tester.py.in 

tester.py: src/test/tester.py.in Makefile 
     $(SED) -e 's,[@]PYTHON[@],$(PYTHON),' < $< > [email protected] 
     chmod +x [email protected] 
endif 

HAVE_PYTHON

AM_PATH_PYTHON([2.6],, [:]) 
AM_CONDITIONAL([HAVE_PYTHON], [test "$PYTHON" != ":"]) 

이 유닉스에서 제대로 작동으로 구성 스크립트에 의해 설정되어 있지만 "tester.py.exe을 할 규정에"로 불면 Windows에서. 또한, #! 라인을 얻기위한 복사 및 대체 기술은 테스트 스위트를 여러 모듈로 나눌 수 없다는 것을 의미합니다.

더 좋은 방법이 있나요?

답변

4

컴파일 된 항목에 대해서만 _SOURCES을 사용해야하므로 여기에 $(EXEEXT)이 추가됩니다. 사용해보기 :

TESTS = unittests 
if HAVE_PYTHON 
TESTS += tester.py 
# Possibly use += here depending on the rest of your Makefile.am 
check_SCRIPTS = tester.py 
# I added $(srcdir) here so VPATH builds still work. 
tester.py: $(srcdir)/src/test/tester.py.in Makefile 
     $(SED) -e 's,[@]PYTHON[@],$(PYTHON),' < $< > [email protected] 
     chmod +x [email protected] 
endif 

configure.ac을 통해 대체하지 않는 이유가 있습니까?

AS_IF([test "$PYTHON" != ":"], [AC_CONFIG_FILES([src/test/tester.py])]) 

config.status를 사용하여 스크립트를 리메이크과 규칙을 다시 자동 생성됩니다.

편집 1 : 당신이 정말로 make check의 일환으로 파이썬 테스터 스크립트를 실행하고 싶은 것을, 나는이 작업을 수행하려는 경우

:

check-local: 
if HAVE_PYTHON 
     $(PYTHON) $(srcdir)/src/test/tester.py 
endif 

는 (나는 외부 check-local를 넣어 if HAVE_PYTHON이므로 필요한 경우 check-local의 일부로 실행될 다른 명령을 정의 할 수 있습니다.)

이 글을 쓰는 대신 다음을 쓰는 것이 좋습니다.

check-local: 
     test "$(PYTHON)" != ":" && $(PYTHON) $(srcdir)/src/test/tester.py 

automake 매뉴얼의 extending을 참조하십시오.

+0

'check_SCRIPTS' 물론, 나는 그것을 생각해야합니다. 다른 하나는'AS_IF' 안에'AC_CONFIG_FILES'를 넣을 수 없다고 생각했지만, 어쨌든 모든 거대한 파일을 하나의 거대한 파일 콘트 라 파이썬 스타일에 넣지 않아도된다는 문제를 해결할 수는 없을 것입니다. 필자가 정말로 원했던 것은''./tester.py' 대신''$ (PYTHON) $ (srcdir)/src/test/tester.py''를 실행하기위한'check-TESTS' 타겟을 얻는 방법입니다. '. (나는 결국 포기하고 랩퍼 스크립트를 만들지 만, 나는 더 많은 윈도우 쓰레기를 다루어야하기 때문에 그것을 피하고있다.) – zwol

+0

@Zack : 제 편집을 확인하십시오, 당신이 원하는대로한다고 생각합니다. –

+0

네, 수표 현지인이가는 길 같습니다. 감사. – zwol

관련 문제