`make -j`의 재귀 호출, 버전마다 왜 이렇게 다를까

Recursive `make` and `-j`

Makefile 레시피에서 다시 `make`를 호출할 때 병렬 작업이 제대로 전달되지 않는 문제를 GNU Make 3.81부터 4.3까지 비교했다. `+` 접두사나 `$(MAKE)`를 쓰면 jobserver 경고는 사라지지만, 하위 make에 `-j` 값을 강제로 지정하면 여전히 병렬성이 리셋된다. 결국 원하는 병렬성은 상위에서 자동으로 결정되고 하위에서는 명시적 `-j`만 적용되는 이상적인 동작인데, 현재 버전에서는 트레이드오프를 선택해야 한다.

Neither method silences warning “b,” about “resetting jobserver mode,” though.
  1. stabbles

    `-j`는 최상위 호출에만 쓰기 위한 것이고, $(MAKE) 패턴은 표준이다.

    서브메이크와 다른 서브프로세스에 jobserver가 상속되도록 보장하는 `+`나 $(MAKE) "트릭"은 gmake 4.4(2022년부터)에서는 더 이상 필요 없다. 파이프 대신 기본적으로 FIFO를 쓰기 때문이다. 작성자는 그냥 gmake를 업그레이드하면 된다 :).

  2. fragmede

    그러지 마라!

    https://accu.org/journals/overload/14/71/miller_2004/

    Recursive Make Considered Harmful

    Peter Miller 저

이 날의 다른 글

2026-09-30