问题描述
概述
我正在将 C++/ObjC++ 库移植到 Swift 包管理器。该库针对常见的 Apple 平台(iOS、macOS)。目前,可以使用 xcodebuild
和静态库目标构建库。
问题
由于该库包含 C++ ObjC 桥接代码,因此它具有一个文件,使用标志 -fno-objc-arc
编译。所有其他文件都是用 ARC 编译的。是否可以传递一个标志,告诉 SPM 在没有 ARC 的情况下也编译该文件?
截图
Package.swift
// swift-tools-version:5.4
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "library_name",platforms: [
.iOS(.v13)
],products: [
.library(
name: "library_name",targets: ["library_name"]),],dependencies: [
],targets: [
.target(
name: "library_name",dependencies: [],path: "./sources/",exclude: [
],sources:
[
"sourcefile_noARC.mm","sourcefile2.mm","sourcefile3.cpp",publicHeadersPath: "SwiftPackage/headers/",cxxSettings: [
.headerSearchPath("./")
]
),cxxLanguageStandard: .cxx14
)
“不安全标志”
我尝试使用 unsafe flags 功能将编译标志传递给整个库:
.target(
name: "fs_helpers",cxxSettings: [
.headerSearchPath("./"),.unsafeFlags(["-fno-objc-arc"]) // ADDING THE FLAG
]
),
解决方法
我认为目前不可能。然而,我们希望 this proposal 会被接受,你(和我)的问题会得到解决。有几个替代方案可能会有所帮助:
- 使用可可豆荚
- 使用子模块
- 使用预编译的二进制文件