🔥 빌드 구성 설정하기
338자
5분
Swift 패키지 매니저는 개발자에게 디버그(Debug)와 릴리즈(Release), 두 가지 빌드 구성을 제공해요. 기본값은 디버그입니다.
디버그 모드로 빌드하기
swift build
명령을 실행하면 Swift 패키지 매니저는 기본적으로 디버그 구성으로 빌드해요. swift build -c debug
명령으로 디버그 모드를 명시할 수도 있죠. 디버그 모드로 빌드한 결과물은 빌드 폴더 아래 debug
디렉토리에 담깁니다.
디버그 모드에서 Swift 패키지 매니저는 Swift 타겟을 다음 플래그와 함께 빌드해요:
Onone
: 최적화 없이 컴파일합니다.g
: 디버깅 정보를 생성합니다.enable-testing
: Swift 컴파일러의 테스트 기능을 활성화합니다.
이런 Swift 코드가 있다고 해 보죠:
func greet(name: String) { print("Hello, \(name)!") } greet(name: "Steve")
swift
위 코드를 디버그 모드로 빌드하면 Swift 패키지 매니저가 다음 명령을 실행할 거예요:
$ swiftc -g -Onone -enable-testing greet.swift
shell
C 언어 타겟은 디버그 모드에서 이런 플래그로 빌드돼요:
O0
: 최적화 없이 컴파일합니다.g
: 디버깅 정보를 생성합니다.
릴리즈 모드로 빌드하기
swift build -c release
명령으로 릴리즈 모드 빌드를 할 수 있어요. 릴리즈 모드 빌드 결과물은 빌드 폴더 아래 release
디렉토리에 저장됩니다.
릴리즈 모드에서 Swift 패키지 매니저는 Swift 타겟을 이런 플래그로 빌드해요:
O
: 최적화하며 컴파일합니다.whole-module-optimization
: 입력 파일을 하나씩 최적화하지 않고 모듈 단위로 한꺼번에 최적화합니다.
앞의 Swift 코드 예제를 릴리즈 모드로 빌드하려면 이렇게 하면 돼요:
$ swiftc -O -whole-module-optimization greet.swift
shell
O
플래그로 최적화를 하고,whole-module-optimization
플래그로 전체 모듈을 최적화하는 거죠.
C 언어 타겟은 릴리즈 모드에서 이런 플래그로 빌드됩니다:
O2
: 최적화하며 컴파일합니다.
추가 플래그 전달하기
C, C++, 또는 Swift 컴파일러에 추가 플래그를 전달하는 세 가지 방법이 있어요:
Xcc
나Xswiftc
같은 커맨드 라인 플래그로 모든 타겟에 C 또는 Swift 플래그를 전달하기- 매니페스트에서
cSettings
나swiftSettings
옵션으로 특정 타겟에 컴파일 플래그를 상세히 지정하기 - 목적지 JSON 파일 사용하기. 여러 타겟에 같은 커맨드 라인 플래그를 써야 한다면 JSON 파일에 모아
-destination example.json
식으로 전달하고extra-cc-flags
와extra-swiftc-flags
를 설정하는 거예요.- 예제는
Utilities/build_ubuntu_cross_compilation_toolchain
를 참고해 보세요.
- 예제는
Xcc
로 준 C 플래그나cSettings
에 지정한 플래그는 편의상 Swift 컴파일러에도 전달되지만,extra-cc-flags
는 그렇지 않다는 점이 다릅니다.
이렇게 Swift 패키지 매니저가 제공하는 빌드 구성과 옵션을 잘 활용하면 프로젝트 빌드를 원하는 대로 조종할 수 있어요. 개발할 때는 디버그 모드로, 배포할 때는 릴리즈 모드로 빌드하는 게 좋겠죠?