Ric*_*hiy 8 c++ macos ios swift swift-package-manager
我正在开发一个支持 iOS 和 macOS 的跨平台 C++ 库。可以使用 Swift Package Manager 集成该库。在 C++ 中,很容易拥有一个头文件和多个不同的实现文件,这些文件将为每个平台进行编译。例如,标头有一个print()方法,每个目标以不同的方式实现它:
macOS: "print_macOS"
iOS: "print_iOS"
Windows: "print_Windows"
Run Code Online (Sandbox Code Playgroud)
是否有可能以某种方式使 Swift Package Manager 根据平台有条件地包含/排除目标中的特定文件?
我发现的最接近的功能是条件目标依赖项,但它涉及包含/排除特定库而不仅仅是文件。我需要有更细粒度的方法。
目前我正在使用编译时指令来解决此问题:
#include "Print.h"
std::string Print::PrintMethod()
{
#if TARGET_OS_IPHONE
return "print_iOS";
#else
return "print_macOS";
#endif
}
Run Code Online (Sandbox Code Playgroud)
那么,有没有什么方法可以用不同的文件实现相同的结果呢?请注意,除了这两个文件之外,两个平台(iOS 和 macOS)的目标完全相同。
参考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: "ResultingTarget",
platforms: [
.iOS(.v13), .macOS(.v10_15)
],
products: [
.library(
name: "ResultingTarget",
targets: ["ResultingTarget"]),
],
targets: [
.target(
name: "ResultingTarget",
sources:
[
// "File_for_iOS.mm", <----- Need to include only for iOS
"File_for_macOS.mm", <----- Need to include only for macOS
"Other_file.mm",
],
publicHeadersPath: "Headers",
cxxSettings: [
.headerSearchPath("headers"),
]),
],
cxxLanguageStandard: .cxx14
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
483 次 |
| 最近记录: |