4.1 创建 C 语言目标

原文链接: https://docs.swift.org/latest/documentation/packagemanagerdocs/creatingclanguagetargets/

4.1 创建 C 语言目标

在你的 Swift 包中把 C 语言代码包含为一个目标。

概述

C 语言目标的结构与 Swift 目标类似,只是多了一个目录(通常命名为 include)用来存放公共头文件。如果你存放公共头文件的目录不叫 include,请在 target 上用 publicHeadersPath 参数声明它。

Swift Package Manager 对可执行目标只允许一个有效的 C 语言主文件。例如,同一个目标中同时存在 main.c 和 main.cpp 就是无效的。

向 Swift 暴露 C 函数

在下列情形中,Swift Package Manager 会为每个 C 语言库目标自动生成模块映射:

  • 如果 include/Foo/Foo.h 存在、Foo 是 include 目录下唯一的目录,并且 include 目录中没有任何头文件,那么 Swift Package Manager 会把 include/Foo/Foo.h 用作伞形头文件(umbrella header)。

  • 如果 include/Foo.h 存在,并且 include 中没有其他子目录,那么 Swift Package Manager 会把 include/Foo.h 用作模块映射的伞形头文件。

  • 否则,Swift Package Manager 会把 include 目录用作伞形目录(umbrella directory),该目录下的所有头文件都会被包含进模块。

如果 include 的布局比较复杂,或者头文件与模块不兼容,请在 include 目录中提供一个 module.modulemap。