1

我正在尝试构建一个库以通过 Cocoapods 分发。该库主要用 Objective C 编写,但包含一些 C++ 文件。没有一个 C++ 头文件是库的公共 API 的一部分。该库在 Xcode 中构建良好,我可以作为框架分发,但 pod 可能更容易被其他人使用,对吧?

这是我第一次尝试构建 cocoapod,所以我可能会做一些明显错误的事情。

当我运行pod lib lint或尝试构建依赖于 pod 的演示应用程序时,我收到错误消息,提示构建系统根本不理解 C++。

在 C++ 头文件中:

class CGuard {
> unknown type name 'class'; did you mean 'Class'?

在另一个 C++ 头文件中:

template<typename T>
class CContexts {
> unknown type name 'template'

我的 podspec 文件包括

spec.xcconfig = {
  'CLANG_CXX_LANGUAGE_STANDARD' => 'c++11',
  'CLANG_CXX_LIBRARY' => 'libc++'
}
spec.library = "c++"

我还能做些什么来告诉构建系统使用 C++ 编译器?

4

1 回答 1

0

看起来关键是添加private_header_files条目以从 Cocoapods 导出的框架中删除 C++ 标头。

尽管 Cocoapods 被记录为仅包含生成的模块伞头文件中的文件,但如果该部分没有自己的条目public_header_files,则看起来每个subspec部分都包含其所有标题。subspecpublic_header_files

C++ 文件都在一个subspec部分中编译,以便我使用不同的编译器设置,因此private_header_files条目也需要在该subspec部分中。

于 2019-10-25T21:58:59.213 回答