2017-10-26 7 views
0

오브젝트 파일에 대한 C 파일 컴파일을 위해 %.c에서 %.o까지 내가 괜찮은 메이크 파일이 있습니다.암시 적 규칙의 모든 사용에 종속성 추가

그러나이 암시 적 규칙을 사용하여 빌드 된 모든 파일은 foo.h이라는 추가 헤더에 의존해야합니다.

는 내가 개별 .o 파일처럼 foo.h에 의존하기 위해 추가 일회성 규칙을 추가 할 수 있습니다 알고

bar.o : foo.h 

...하지만 난 모든의 종속성으로 foo.h을 추가 할 .o 파일은 .c 개의 파일에서 생성됩니다. 나는 의존성을 "추가"하지만 묵시적 규칙을 유지할 수 있다면

%.o : foo.h 

보고 :

%.o : %.c foo.h 

이 :

은 유사 위의와 나는이 시도.

작동하지 않았습니다. 나는 확실히 단지처럼 내 패턴 규칙에 묵시적 규칙에서 레시피를 복사하여 붙여 넣을 수 있습니다 :

%.o : %.c foo.h 
    $(CC) -c $(CPPFLAGS) $(CFLAGS) $< 

하지만 가능하면 그것을 복제하지 싶습니다.

답변

2

귀하의 어려움은 make가 패턴 규칙을 다루는 방법 때문입니다. make가 모든 오브젝트 파일의 전제 조건으로 foo.h을 사용하도록하려면 패턴 규칙에 의존하지 말고 오브젝트 파일을 명시 적으로 나열해야합니다. 그러나 make는이를 수행 할 수있는 방법을 제공합니다. 정적 패턴 규칙은 패턴 규칙처럼 보이지만 비슷한 규칙 규칙 집합의 컴팩트 형식과 같습니다. 예 :

OBJS := $(patsubst %.c,%.o,$(wildcard *.c)) 

$(OBJS): %.o: foo.h 

유일한 제약 조건은 모든 개체 파일을 열거하는 방법을 찾아야한다는 것입니다. 이것은 종종 실제 문제가 아닙니다.

패턴은 전제 조건이 모든 대상에서 동일하기 때문에 필요하지 않습니다. 다음을 사용할 수도 있습니다.

OBJS := $(patsubst %.c,%.o,$(wildcard *.c)) 

$(OBJS): foo.h 
+0

감사합니다. 나는 암묵적인 규칙을 복제하는 것과 관련이 있다고 생각한다. – BeeOnRope

+0

@BeeOnRope 나는 그것이 [묵시적 규칙 검색 알고리즘] (https://www.gnu.org/software/make/manual/make.html#Implicit-Rule-Search)과 관련이 있다고 생각한다. 4 단계 참조 ... –

+0

매뉴얼 인용 : "대상이 동일한 전제 조건을 가질 필요가 없기 때문에 여러 대상이있는 일반 규칙보다 일반적입니다." ... 그러나이 경우 전제 조건이 동일하기 때문에 정상적인'$ (OBJS) : foo.h '보다 정적 패턴 규칙을 사용하는 것이 유리하지 않다. 내가 놓친 게 있니? – Vroomfondel