2014-02-22 4 views
1

정적 패턴 규칙을 작성하여 패턴과 일치하는 대상에 대한 종속성 목록을 생성합니다. 종속성은 쉘 명령을 통해 생성됩니다 (파일 내용은 종속성에 대한 정보를 제공합니다). 여기에 명시 적 규칙의 예 :이 작동하는 동안대상 줄기를 Makefile의 쉘 명령으로 전달하는 방법

f1.o: $(shell gendep src/f1/f1.source) 
    ... (some compilation command here) ... 

, 나는 같은 파일 구조를 유지하고있어 이후 각각의 새로운 대상에 대해 그것을 다시하고 싶지 않아요. 정적 패턴 규칙에 대한 나의 시도는 다음과 같았습니다.

%.o: $(shell gendep src/%/%.source) 
    ... 

스템 (%와 일치하는 패턴)을 쉘 명령에 전달하는 데 문제가 있습니다. 쉘 명령은 문자 그대로 해석하고 src/%/%. source에서 작동하지만 당연히 존재하지 않습니다.

줄기를 셸 명령에 전달하는 방법이 있다고 의심하지만 찾을 수없는 것 같습니다. 여기있는 전문가가 나를 도와 줄 수 있을까요? 죄송합니다 이것이 초보자 질문 (나는 실제로 하나입니다).

답변

2

일반적으로 Make는 어떤 규칙을 실행하기 전에 $(shell ...) 지시어를 확장하거나 어떤 규칙을 실행해야하는지 결정하기 때문에 어렵습니다. 우리는 Secondary Expansion, 약간 고급 만들기 트릭을 이용하여 해당을 지연 할 수 있습니다

.SECONDEXPANSION: 

%.o: $$(shell gendep src/$$*/$$*.source) 
    ... 

other methods for automatic dependency generation있다.

+0

시도해 보았지만 작동하지 않았습니다. 예를 들어 $ (shell gendep src/$ */$ *. source)를 시도하면 src /. source.source를 찾고있는 오류 (gendep에 의해 throw 된)가 발생합니다. 내가 뭔가 잘못하고 있는지 확실하지 않아. – dkn37

+0

@ dkn37 : 죄송합니다. 귀하의 질문을 서둘러 읽었으며 귀하가 규칙 본문에서 셸 명령을 언급한다고 생각했습니다. 내가 바꿀거야 ... – Beta

관련 문제