我有些困惑,因为无论我做什么,SPM都会尝试将C++代码编译为Objective-C,当然它找不到正确的头文件。
这是我的尝试。
源代码目录结构:
Sources
|
+-CxxModule
| |
| +-include
| | |
| | +-CxxModule.hpp
| |
| +-CxxModule.cpp
|
+-SwiftModule
|
+-SwiftModule.swift
清单
Package.swift
如下:// swift-tools-version: 5.6
import PackageDescription
let package = Package(
name: "CxxLibrary",
products: [
.library(
name: "CxxLibrary",
targets: ["SwiftModule"]),
],
dependencies: [
],
targets: [
.target(
name: "CxxModule",
dependencies: []),
.target(
name: "SwiftModule",
dependencies: ["CxxModule"],
path: "Sources/SwiftModule"
),
]
)
CxxModule.hpp
的内容如下:
#ifndef CxxModule_hpp
#define CxxModule_hpp
#include <iostream>
extern "C" void printHello();
#endif /* CxxModule_hpp */
CxxModule.cpp
的内容如下:
#include "CxxModule.hpp"
void printHello() {
// use something from the standard library to make sure
// c++ is really being used
std::cout << "Hello, world!" << std::endl;
}
最后,
SwiftModule.swift
文件:import CxxModule
我有什么遗漏吗?有没有办法告诉SPM该模块是用C++编写的?还是说目前不支持这种方式?
注意:如果我删除Swift目标,C++可以正常编译。