Swift 包管理器:将编译标志添加到单个文件 -fno-objc-arc

Swift Package Manager: add compile flag to a single file -fno-objc-arc

概览

我正在将 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",
            dependencies: [],
            path: "./sources/",
            exclude: [

            ],
            sources:
                [
                    "sourcefile_noARC.mm",
                    "sourcefile2.mm",
                    "sourcefile3.cpp",
                ],
            publicHeadersPath: "SwiftPackage/headers/",
            cxxSettings: [
                .headerSearchPath("./"),
                .unsafeFlags(["-fno-objc-arc"]) // ADDING THE FLAG
            ]
        ),

但是,这会将标志添加到整个库,而不是像我想要的那样只添加到单个文件。

我认为目前不可能。然而,我们希望 this proposal 将被接受,您(和我的)的问题将得到解决。有一些替代方案可能会有所帮助:

  1. 使用Cocoapods
  2. 使用子模块
  3. 使用预编译的二进制文件