2014-05-18 3 views
1

foo 프로그램에 대한 테스트를 빌드하고 싶습니다. src에서프로그램 소스에 따라 테스트 빌드

SUBDIRS = src tests 

Makefile.am 포함 :

bin_PROGRAMS = foo 
foo_CXXFLAGS = # a lot of $(XXX_CFLAGS) 
foo_LDADD = # a lot of $(XXX_LIBS) 
foo_SOURCES = # a lot of source files 

Makefile.am을 tests에서 포함

check_PROGRAMS = footesta footestb 
TESTS = footesta footestb 
footesta_SOURCES = footesta.cpp 
footestb_SOURCES = footestb.cpp 

이 테스트는 foo 기호에 따라 내가 생각처럼 내 루트 Makefile.am 보인다 상단에 foo_LIBADD = libfoo.la을 사용하고 을에 넣으면 편리한 라이브러리를 만들 수 있습니다.님의 src입니다. 이 문제를 해결하려면 올바른 방법이 있습니까?

+0

왜, 왜, 왜 autotools입니까? 아이들에 대해 생각해보십시오! –

+1

@DanielKamilKozar - 그는 바퀴를 재발견하고 싶지 않기 때문에 'cmake'가 (천천히) 재발 명되고 있습니까? –

+1

예, 올바른 방향입니다. – ptomato

답변

1

옳은 방법이지만 여러 가지 옵션을 제안 할 수도 있습니다.

우선 non-recursive automake을 사용하는 것이 좋습니다. 세 대신 Makefile.am 만 있으면 최신 상태로 유지하고 autotools의 불쾌한 요인을 줄일 수 있습니다.

특히, Makefile.am에있는 편리한 라이브러리 방법을 사용하면 종속성 추적이 매우 복잡해 지므로 헤더 파일을 변경하는 경우 테스트를 올바르게 다시 실행하지 않을 수도 있습니다. 종속성 추적은 단일 재귀가 아닌 Makefile.am을 사용할 때 올바르게 수행됩니다. 당신이

SELF_CONTAINED_SRCS = foo.h foo1.c foo2.c foo3.c 
foo_SOURCES = $(SELF_CONTAINED_SRCS) main.c other.c 

footest_SOURCES = footesta.c $(SELF_CONTAINED_SRCS) 

있을 것입니다 수 있도록

다른 옵션은 다시 비 재귀 빌드 시스템을 사용하여,이 생성 아카이버를 실행하는 내 단계를 방지, 소스 그룹과 변수를 선언하는 것입니다 파일을 컴파일 한 다음 링커가 압축을 풀고 컴파일 된 소스를 공유하면서 (대상 당 CFLAGS을 사용하지 않는 한).

CFLAGS (예 : foo3.c에 테스트 관련 코드가 있음)을 사용하려는 경우 두 대상간에 컴파일 된 오브젝트 파일을 공유 할 수 없지만 변수 확장을 사용하고 편의 라이브러리에서는 가능하지 않습니다. 이것이 실제로 제가 선호하는 옵션입니다.

+0

감사합니다. 비 재귀 적 방법을 사용하여 유지 관리 프로세스를 간소화합니다. –