您的当前位置:首页正文

Swift C/C++ 混编 -- module.modulem

来源:华佗小知识

背景

Swift project 中 c/c++ 混编一般可以通过创建 bridging-header.h 文件来完成, 然而如果是在 framework 中这种操作是不被准许的, 即使是在 executable target 中虽然能完成集成但是也十分不优雅

方案

使用

  • 集成libs

直接将需要集成的 libs 丢进项目

image.png
  • 创建 module.modulemap 文件

在工程中创建 module.modulemap 文件 (这里直接在 excutable target 下创建) 选择新建 empty, 文件名填写 module.modulemap

image.png
  • 编辑 module.modulemap 文件
module Unsafe [system] [extern_c] {
    header "../lib/include/unsafe-header.h"
    export *
}
module SomeModule [system] [extern_c] {
    header "PATH_FOR_HEADER"
    export *
}

Warning: Unsafemodule name, headerpathmodule.modulemap实体路径(不是 xcode 中看到的虚拟路径)的相对路径, 否则会报错找不到头文件, Copy Bundle Resources 中不能添加 module.modulemap 文件, 否则第二次编译会报错 Redefinition module

image.png
  • 工程配置

    • 方法一: 通过 Configuration Settings File 无疑是最简单的, 这里不做赘述
    • 方法二: Build Settings -> Import Paths 填写 $(SRCROOT)/Modulemap (当前 target 文件夹路径), 如果 libs源码导入, 报错各种头文件找不到, 可以设置下 Building Settings -> Header Search Paths -> $(SRCROOT)/Modulemap/lib/include/
      image.png
      image.png

结束