WITH-COMPILATION-UNIT — 컴파일 지연 동작의 범위를 묶는 매크로
WITH-COMPILATION-UNIT — 컴파일 지연 동작의 범위를 묶는 매크로
여러 파일을 연달아 컴파일할 때, 컴파일러가 끝까지 미뤄두는 동작(예: 정의되지 않은 함수 경고)의 기준점을 한 곳으로 모으고 싶을 때 쓰는 매크로예요. 폼들을 묶어 '하나의 컴파일 단위'처럼 다루게 해줘요.
이 문서는 컴파일/빌드 관련 매크로입니다. 여러 파일을 함께 컴파일하는 시점에 주로 유용해요.
시그니처
with-compilation-unit ({option}) form* => results*
option::= :override override
본문
인자와 값 (Arguments and Values)
override— 일반화된 불(generalized boolean); 평가돼요. 기본값은nil.forms— 암묵적 progn.results—forms가 돌려준 값.
설명 (Description)
forms를 왼쪽에서 오른쪽으로 실행해요. with-compilation-unit의 동적 환경 안에서, 컴파일러가 컴파일이 끝날 때까지 미뤄둔 동작은 가장 바깥쪽 with-compilation-unit 호출이 끝날 때까지 미뤄져요.
허용되는 option 집합은 구현이 확장할 수 있지만, 표준화된 키워드는 :override뿐이에요.
동적으로 중첩되면 :override와 연결된 값이 true가 아닌 한 바깥쪽 with-compilation-unit 호출만 효과를 가져요. :override가 true인 경우엔 경고가 그 true인 가장 안쪽 호출 끝까지 미뤄져요.
compile-file 함수는 자기 코드 주위에 (with-compilation-unit (:override nil) ...)의 효과를 제공해요.
구현 의존적인 확장은 구현 의존적인 키워드를 써서 프로그래머가 명시적으로 요청했을 때에만 제공될 수 있어요. 구현들은 키워드 없거나 :override 키워드만 쓰는 이 매크로 사용에 추가 의미를 붙이는 것을 금지돼요.
예제 (Examples)
어떤 구현이 정의되지 않은 함수 경고 같은 특정 종류의 경고를 컴파일 단위(예: 파일) 끝까지 미루는 게 정상이라면, 다음 예제는 그 경고들이 여러 파일의 컴파일이 끝날 때까지 미뤄지게 하는 법을 보여줘요.
(defun compile-files (&rest files)
(with-compilation-unit ()
(mapcar #'(lambda (file) (compile-file file)) files)))
(compile-files "A" "B" "C")
다만 구현이 평소에 어떤 경고도 미루지 않는다면 with-compilation-unit을 써도 효과가 없을 수 있다는 점을 유의하세요.
특이 상황 (Exceptional Situations)
없음.
참고 (Notes)
없음.
더 알아보기
compile— 폼/함수를 컴파일하는 함수compile-file— 파일을 컴파일하는 함수