如何在Xcode 11程序包管理器中处理C文件?

问题描述 投票:0回答:1

我有一个C函数,在Swift包装函数中调用它。现在,我想用这个Swift包装函数创建一个Swift包。但是,我做错了。

这里是C函数,将两个double值相加。

//  addDoubles.c
#include <math.h>
#include "addDoubles.h"

double addDoubleWithC(double val1, double val2) {
    return val1 + val2;
}

这里是带有包装功能的Swift文件:

//  WrappedCFunctions.swift
import Foundation
public struct WrappedCFunctions {    
public static func addDoubles(val1:Double, val2:Double) -> Double{
    let resulFromCFunction = addDoubleWithC(val1, val2)
return resulFromCFunction
}
}

在viewController中,我正在使用此功能:

import UIKit

class ViewController: UIViewController {
@IBOutlet weak var textLabel: UILabel!

override func viewDidLoad() {
    super.viewDidLoad()
    let val1 = 1.11
    let val2 = 2.22
    let result = WrappedCFunctions.addDoubles(val1: val1, val2: val2) 
    let txt = String(val1) + " + " + String(val2) + " = " + String(result)
    textLabel.text = txt
}
}

项目结构如下:

enter image description here

此应用程序按预期正常工作。

在下一步中,我使用File-> New-> Swift Packe命名为Math的软件包。然后,我将文件WrappedCFunctions.swift从AddDoubles文件夹移到了程序包的CMath / Source / CMath文件夹中。在下一步中,我将包包含到项目中。这导致以下结构:

enter image description here

最后但并非最不重要的一点是,我在ViewController.swift中添加了Import CMath语句并构建了项目。

但是,无法识别该包。

enter image description here

如何解决此问题?

ios c swift xcode package-managers
1个回答
0
投票

没有看到您的Package.swift文件,就不可能知道您的软件包安装是否正确。查看您发布的图片,我可能得出的最好猜测是它的配置不正确。

我猜这是因为当您需要2个目标时,您在Sources/中只有1个目录(通常,对于SwiftPM,每个目标1个目录,并且在包中看不到任何.c文件) 。 C代码将成为Swift目标所依赖的目标。然后,您有一个依赖于Swift目标的产品。您将在Xcode中链接并导入该产品。

[如果您查看我拥有的this回购,我同时使用C和Swift,因此您可以看到如何设置Package.swift以构建2个目标。

© www.soinside.com 2019 - 2024. All rights reserved.