🔥 C언어 타겟 만들기
C 언어 타겟을 만드는 방법은 Swift 타겟과 비슷해요. 하지만 차이점이 약간 있습니다. C 언어 라이브러리는 반드시 include
디렉토리를 가지고 있어야 해요. 이 디렉토리는 외부에 공개할 헤더 파일들을 보관하는 곳이랍니다.
Swift 타겟에서 C 언어 타겟을 가져오려면, manifest 파일에 target을 추가하면 돼요. Swift 패키지 매니저는 다음 3가지 경우에 각 C 언어 라이브러리 타겟에 대한 모듈 맵을 자동으로 만들어 줄 거예요:
include/Foo/Foo.h
파일이 있고,Foo
가include
디렉토리 아래 유일한 디렉토리이며,include
디렉토리에 헤더 파일이 없다면,include/Foo/Foo.h
가 umbrella 헤더가 됩니다.include/Foo.h
파일이 있고,include
에 다른 하위 디렉토리가 없다면,include/Foo.h
가 umbrella 헤더가 됩니다.- 그 외에는
include
디렉토리가 umbrella 디렉토리가 되며, 이는 그 아래 모든 헤더 파일이 모듈에 포함된다는 걸 뜻합니다.
만약 복잡한 include
구조나 모듈과 맞지 않는 헤더 파일이 있다면, 직접 만든 module.modulemap
을 include
디렉토리에 넣어줍니다. 실행 파일 타겟은 오직 하나의 올바른 C 언어 main 파일만 허용합니다. 예를 들어, 같은 타겟에 main.c
와 main.cpp
를 함께 넣을 수 없답니다. 아래는 C 언어 라이브러리 타겟을 설정하는 간단한 예시입니다.
// Package.swift let package = Package( name: "MyCLibrary", products: [ .library(name: "MyCLibrary", targets: ["MyCLibrary"]), ], targets: [ .target( name: "MyCLibrary", dependencies: [] ), ] )
swift
위 코드는 MyCLibrary
라는 C 언어 라이브러리 타겟을 정의하고 있어요.
// MyCLibrary 디렉토리 구조 . ├── include │ ├── MyCLibrary │ │ └── MyCLibrary.h │ └── module.modulemap └── MyCLibrary.c
text
MyCLibrary
디렉토리 구조를 보면, include
디렉토리 안에 MyCLibrary.h
헤더 파일이 있고, module.modulemap
파일도 있어요. 그리고 MyCLibrary.c
파일이 라이브러리 구현 코드를 담고 있겠죠.
이렇게 설정하면 Swift 타겟에서 MyCLibrary
모듈을 import해서 C 언어 라이브러리를 사용할 수 있어요.
import MyCLibrary // C 언어 라이브러리 함수 호출 let result = myClibFunction()
swift
Swift 패키지 매니저가 대부분 작업을 자동으로 해주니까 간단한 설정만으로도 C 언어 라이브러리를 Swift 프로젝트에 통합할 수 있습니다.