2012-01-03 5 views
3

비 재귀 적으로 컴파일하려는 여러 하위 디렉토리가있는 응용 프로그램이 있습니다. 이를 위해 하위 디렉토리의 모든 소스 파일을 여러 변수로 분리 한 다음 소스의 최종 콜렉션에서 사용합니다. 이런 식으로 뭔가 : Makefile.am에서 패턴을 대체하는 방법

GUI_SOURCEFILES = Gui/MainWindow.cc \ 
        Gui/StatusBar.cc 
... 
foo_SOURCES = $(GUI_SOURCEFILES) \ 
       $(DATABASE_SOURCEFILES) \ 
       main.cc 

지금 그러나이 모든 데이터베이스 파일의 앞에 모든 GUI 소스 파일에 대한 Gui/Db\를 작성하는 나를 강제로. 나는이 접두사 automaticall을 만드는 것이 가능해야한다고 생각하지만, 올바르게 이것을 할 수있는 방법을 찾을 수 없다.

GUI_SOURCEFILES = MainWindow.cc \ 
        StatusBar.cc 
... 
foo_SOURCES = $(GUI_SOURCEFILES) \ 
       $(patsubst %,Gui/%,$(DATABASE_SOURCEFILES)) \ 
       main.cc 

하지만 autotools를 전혀이 Makefile.am를 컴파일되지 않습니다 : 나는 평소 메이크업 방법을 시도했다.

autotools에서이 작업을 수행 할 수있는 방법이 있습니까?

+0

'$ (addprefix Gui /, $ (DATABASE_SOURCEFILES)) '는 어떻습니까? –

+0

@dma_k : 이것은 같은 문제가있다 : src/Makefile.am : 12 : addprefix GUI /, $ (GUI_SOURCEFILES : 비 POSIX 변수 이름'src/Makefile.am : 12 : (아마 GNU make 확장)' .이 작업을 수행하는 매우 구체적인 autotools/m4 방법이 있어야한다고 생각하지만 위대한 확장 방법을 사용하지 못했습니다. 모든 Makefile 방법은 아마도 의문의 여지가 없습니다. – LiKao

+1

@LiKao : 접미어 대체와 같은 일부 전통적인 메이크 파일 구문도 작동합니다. 그러나 나는 * 접두어 * 메소드를 모른다. – thiton

답변

3

여기에 방법이 없습니다. 모든 파일 이름은 automake 시간에 사용할 수 있어야하며, 특정 메이크 타임과 같은 기능 (이식성이없는)을 배제합니다.

+0

파일 이름을 모두 사용할 수 있습니다. 필자는 매번 디렉터리 접두사를 명시 적으로 추가하고 싶지 않습니다. 그게 전부입니다. 나는 이것에 대한 autotools와 운이다고 생각합니다. – LiKao

+1

automake는 * include (와)과 같이 인수가 일정하고 AM 시간에 알려진 경우 * $ (addprefix ...) *를 확장 할 수 있지만 아아, 현재 수행하지 않으며 "가능한 경우 패치를 만들면 제출할 수 있습니다. " –

관련 문제