🔥 LinkerSetting

291자
5분

LinkerSetting 구조체는 링커 빌드 설정을 나타내는데요. 이 구조체를 사용하면 시스템 라이브러리나 프레임워크를 링크하거나 임의의 커맨드 라인 플래그를 링커에 전달할 수 있습니다.

시스템 라이브러리 링크하기

linkedLibrary(_:_:) 메서드를 사용하면 시스템 라이브러리를 링크할 수 있어요. 이 메서드는 특히 C++ 기반 라이브러리나 비모듈 라이브러리처럼 자동으로 링크할 수 없는 라이브러리를 링크할 때 유용하답니다.

예를 들어, "z" 라이브러리를 링크하려면 다음과 같이 하면 되요:

.linkerSetting(
    .linkedLibrary("z")
)
swift

여기서 주목할 점은 다음과 같습니다:

  • 라이브러리 이름을 문자열로 전달해요.
  • 빌드 설정 조건을 추가로 지정할 수 있어요. 조건을 지정하면 해당 조건에 맞을 때만 설정이 적용된답니다.

시스템 프레임워크 링크하기

linkedFramework(_:_:) 메서드를 사용하면 시스템 프레임워크를 링크할 수 있어요. 이 메서드 역시 C++ 기반 프레임워크나 비모듈 프레임워크처럼 자동으로 링크할 수 없는 프레임워크를 링크할 때 유용합니다.

예를 들어, "CoreGraphics" 프레임워크를 링크하려면 다음과 같이 하면 되지요:

.linkerSetting(
    .linkedFramework("CoreGraphics")
)
swift

여기서도 주목할 점은 다음과 같아요:

  • 프레임워크 이름을 문자열로 전달합니다.
  • 빌드 설정 조건을 추가로 지정할 수 있어요. 조건을 지정하면 해당 조건에 맞을 때만 설정이 적용되는 거예요.

안전하지 않은 플래그 설정하기

unsafeFlags(_:_:) 메서드를 사용하면 임의의 커맨드 라인 플래그를 링커에 전달할 수 있답니다. 하지만 이 메서드의 이름에서 알 수 있듯이, 안전하지 않은 플래그를 사용하면 빌드 동작이 예기치 않게 변경될 수 있으므로 주의해야 해요.

일부 빌드 플래그는 지원되지 않거나 악의적인 동작을 유발할 수 있기 때문에, 안전하지 않은 플래그를 사용하는 타겟을 포함하는 제품은 다른 패키지에서 의존성으로 사용할 수 없다는 점도 기억해 두세요.

예를 들어, "-rpath" 플래그를 설정하려면 다음과 같이 하면 됩니다:

.linkerSetting(
    .unsafeFlags(["-rpath", "/path/to/lib"])
)
swift

여기서 주목할 점은 다음과 같네요:

  • 플래그를 문자열 배열로 전달해요.
  • 빌드 설정 조건을 추가로 지정할 수 있습니다. 조건을 지정하면 해당 조건에 맞을 때만 설정이 적용되요.

이렇게 LinkerSetting 구조체를 사용하면 다양한 링커 설정을 쉽게 지정할 수 있답니다. 하지만 안전하지 않은 플래그 사용에는 주의를 기울여야 해요. 가능하면 안전한 방법으로 빌드 설정을 지정하는 게 좋겠죠?