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 将被接受,您(和我的)的问题将得到解决。有一些替代方案可能会有所帮助:
- 使用Cocoapods
- 使用子模块
- 使用预编译的二进制文件
概览
我正在将 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 将被接受,您(和我的)的问题将得到解决。有一些替代方案可能会有所帮助:
- 使用Cocoapods
- 使用子模块
- 使用预编译的二进制文件