2011-03-28 2 views
1

불행히도이 작업을 수행하는 방법을 실제로 찾지 못하거나 어느 프로그램에이 기능이 있는지 기억할 수 없지만 다양한 설치 프로그램에서이 작업을 수행했습니다.Makefile, 디렉토리의 모든 "예제"를 컴파일하는 옵션?

필자는 autoconf/libtool이 아닌 표준 makefile과 기본적으로 공유 라이브러리를 컴파일 중이며 make test은 방금 빌드 한 라이브러리 (예 : ../bin/libfoo.so.1.0.1)에 연결된 examples 디렉토리의 모든 파일을 간단하게 컴파일하기를 원합니다.

메이크 파일 형식은이 와일드 카드 컴파일을 수행하기 위해 무엇을 제공합니까?

답변

1

디렉토리의 모든 소스 파일을 자동으로 생성하는 메커니즘을 요구하고 있다는 것을 알고 있습니다 만, 나는 그 접근법을 싫어합니다. 미래의 어떤 시점에서 개별 테스트 또는 두 개를 사용할 수 없도록 설정해야합니다. 그러면 파일 이름을 다시 지정하면 자동으로 컴파일되지 않습니다.

나는 당신이 Makefile에 건물을 만들려는 모든 프로그램을 나열하는 것을 선호하지만, 그것은 끔찍할 필요가 없습니다. suffix rules을 사용하면 모든 .c 파일을 .o 개의 파일이나 직접 실행 파일에 빌드 할 수 있습니다.

다음은 AppArmor 회귀 테스트 스위트의 스 니펫입니다.이 스 니펫은 일반적으로 이러한 유형의 것으로 보입니다. (나는 몇 년있다, 나는 모든 관련 비트를 복사 희망 .)

SRC=access.c \ 
    changeprofile.c \ 
    changehat.c \ 
    changehat_fork.c \ 
    changehat_misc.c \ 
    .... 
    unlink.c \ 
    xattrs.c 

... 

#only do the ioperm/iopl tests for x86 derived architectures 
ifneq (,$(findstring $(shell uname -i),i386 i486 i586 i686 x86 x86_64)) 
SRC+=syscall_ioperm.c syscall_iopl.c 
endif 

... 

LIBIMMUNIX:=$(shell  if [ -f /usr/lib/libapparmor.so -o -f /usr/lib64/libapparmor.so ] ; then \ 
           echo -lapparmor ; \ 
         elif [ -f /lib/libimmunix.so.1 -o -f /lib64/libimmunix.so ] ; then \ 
           echo -limmunix ; \ 
         fi) 

CFLAGS+=$(CHANGEHAT_FLAGS) -Wall -Wstrict-prototypes 
LDLIBS+=$(LIBIMMUNIX) 

EXEC=$(SRC:%.c=%) 

... 

all: $(EXEC) changehat.h 

그냥 디렉토리에 새 파일을 삭제만큼 쉬운 일이 아닙니다; Makefile에 추가해야합니다. 그러나 한 줄에 한 번만 이름을 추가하면 좋을 것입니다. 사용을 중지하려면 문제가되는 행을 주석으로 처리하십시오. 거의이므로 빌드 프로세스를 쉽고 효율적으로 제어 할 수 있습니다.

+0

이것은 훨씬 더 의미가 있으며 유연성 (이전/베타 테스트가 필요하거나 제거 될 때까지 저장)을 고맙게 생각합니다. 어떻게 진행되는지, 감사합니다! –

관련 문제