02 - 1챕터
Makefile 변수
- 환경변수 MAKEFILES가 정의된 경우, make는 해당 값을 다른 값보다 먼저 읽을 추가 makefile의 이름 목록으로 간주합니다. (공백으로 구분) 이것은 include 지침과 매우 유사합니다 : 그 파일들을 위해 다양한 디렉토리가 검색됩니다. 또한 이런 makefiles 중 하나 또는 include 된 makefile에서 기본 goal을 가져오지 않거나 MAKEFILES에 나열된 파일을 찾을 수 없는 경우 오류가 아닙니다.
- MAKEFILES의 주요 용도는 make의 재귀 호출 할 때 있습니다. 그래서 make의 최상위 호출 전에 환경 변수를 설정하는 것은 바람직하지 않습니다. 왜냐하면 보통 외부의 makefile을 건들지 않는 것이 더 낫기 때문입니다. 하지만 특정 makefile 없이 make를 실행하는 경우 검색 경로를 정의하는 등의 작업을 수행할 수 있습니다.
- 일부 사용자는 로그인 시 환경에 MAKEFILES를 자동으로 설정하려고 시도합니다. 그때 프로그램은 이 작업이 완료될 것으로 예상되는 파일을 만듭니다. 그러나 다른 사람이 사용하면 이런 makefiles가 작동하지 않기 때문에 이것은 아주 나쁜 생각입니다. makefiles에 명시적인 포함 지침을 작성하는 것이 훨씬 좋습니다.
Makefile이 다시 만들어지는 방법
- 때때로 Makefile은 RCS 또는 SCCS파일과 같은 파일에서 다시 만들 수 있습니다. 만약 Makefile이 다른 파일에서 만들게 된다면 아마도 당신은 Make가 읽을 최신 버전의 Makefile을 가져오길 원할 것입니다.
- 이를 위해 모든 Makefile들의 make를 읽기 전에 처리된 순서대로 각 목표 target을 고려할 것입니다. 그리고 이것이 업데이트하기를 시도할 것입니다. 병렬 빌드가 활성화 된다면 Makefile도 병렬로 다시 빌드됩니다.
- Makefile에 업데이트하는 방법을 알려주는 명시적 규칙이 있거나 암시적 규칙이 적용되는 경우 필요한 경우에 업데이트 됩니다.
- 모든 Makefile이 실제로 변경된 것이 있는 지 확인한 후 make은 새 슬레이트로 시작하여 모든 만들기 파일을 다시 읽습니다. 또한 다시 시작할 때마다 특수 변수 MAKE_RESTART가 업데이트됩니다
- 하나 이상의 Makefile을 다시 만들 수 없다는 것을 알고 있는 경우나 make가 암시적 규칙 검색을 하지 못하도록 하는 경우 암시적 규칙 조회를 하지 못하게 하는 방법을 사용할 수 있습니다. ex) Makefile을 대상으로 명시적 규칙을 작성하고 빈 레시피를 작성할 수 있다.
- Makefile이 이중 콜론 규칙을 지정하여 레시피는 있지만 전제 조건이 없는 파일을 다시 만들면 해당 파일은 항상 다시 만들어집니다.
- Makefile의 경우, 레시피가 있는 이중 콜론 규칙이 있지만 조건이 없는 Makefile은 make가 실행될 때마다 다시 만들어지고 make가 다시 시작되고 Makefile을 다시 읽은 후에 다시 만들어집니다. 따라서 이렇게 하면 무한 루프가 발생합니다. make는 계속해서 Makefile을 다시 만들고 다시 시작하며 다른 작업을 수행하지 않습니다.
- 그래서 이를 방지하려고 make는 레시피가 있지만 전제 조건이 없는 이중콜론 규칙의 대상으로 지정된 Makefile을 다시 만드려고 하지 않습니다.
- Phony target의 효과는 다음과 동일한 효과를 가집니다. 이러한 파일은 결코 최신 상태로 간주되지 않으므로 phony로 표시된 포함된 파일은 make를 계속 다시 시작하게 됩니다.
- 당신은 다음을 활용하여 시작 시간을 최적화 할 수 있습니다. 만약 당신이 Makefile을 다시 만들 필요가 없다는 것을 알고 있다면 다음 중 하나를 추가하여 make가 다시 만들려고 하지 않도록 시도할 수 있습니다.
.Phony: Makefile
# 또는
Makefile:: ;
- 만약 당신이 ‘-f’ 또는 ‘-file’ 옵션으로 지정하지 않는 경우, make는 기본 Makefile 이름을 시도합니다.