![GNU Make 파일에서 주문 전용 필수 구성 요소가 처리되는 순서는 무엇입니까?](https://linux55.com/image/69897/GNU%20Make%20%ED%8C%8C%EC%9D%BC%EC%97%90%EC%84%9C%20%EC%A3%BC%EB%AC%B8%20%EC%A0%84%EC%9A%A9%20%ED%95%84%EC%88%98%20%EA%B5%AC%EC%84%B1%20%EC%9A%94%EC%86%8C%EA%B0%80%20%EC%B2%98%EB%A6%AC%EB%90%98%EB%8A%94%20%EC%88%9C%EC%84%9C%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
나는 읽고 있었다문서하지만 아직 주문이 어떻게 처리되는지 모르겠습니다. 예에서:
myrule: | myrule_step1 myrule_step2
@echo "$(@)"
myrule_step1:
@echo "$(@)"
myrule_step2:
@echo "$(@)"
무엇을 먼저 인쇄할까요? myrule_step1
또는 myrule_step2
?
답변1
순서는명시되지 않은어느 순서로든 실행될 수 있습니다. 이것은 단지 이론적인 질문이 아닙니다. 병렬 빌드 중에 발생할 수 있습니다. 질문과 동일한 Makefile을 가정하고 다음을 실행합니다.
watch -n 0.1 make -j8
인쇄하는 데 몇 초 밖에 걸리지 않았습니다.
myrule_step2
myrule_step1
myrule
당신은 또한 볼 수 있습니다이 StackOverflow 답변저자: Jörg W Mittag:
아니요, 순서가 정의되지 않았습니다. 이게 다야보다선언적 종속성 지향 프로그래밍을 사용하는 경우: 컴퓨터는 최상의 평가 순서를 선택하거나 실제로 평가할 수도 있습니다.동시에.
그러나 mosvy가 지적했듯이 이것은 GNU Make에서만 작동합니다. POSIX make(makefile에 특수 대상을 추가하여 .POSIX
GNU Make에서 에뮬레이션 할 수 있음)는 전제 조건을 처리할 때 왼쪽에서 오른쪽 순서를 지정합니다.
답변2
주문 전제조건만 처리 순서와 무관합니다. 순서에 상관없이, 병렬로 처리할 수도 있습니다. 순서만은 필수 구성 요소를 업데이트해도 대상이 업데이트되지 않음을 의미합니다. 바라보다이 답변.
답변3
문서에는 명확하지 않지만 예제를 실행하면 순서가 실제로 왼쪽에서 오른쪽이라는 것을 알 수 있습니다.
myrule_step1
myrule_step2
myrule