为C+创建一个podspec+;图书馆 我有一些问题创建了一个 PoStute文件,以从iOS应用程序中提取C++库。 实际上,我的主要问题是头文件,我的C++库依赖于在ExtXiC目录中包含在库存储库中的RAPIDIJSON(文件类似${PrjoSoSoxCyPixPix}/ExtXiNC/RAPIDJSON/*H)。

为C+创建一个podspec+;图书馆 我有一些问题创建了一个 PoStute文件,以从iOS应用程序中提取C++库。 实际上,我的主要问题是头文件,我的C++库依赖于在ExtXiC目录中包含在库存储库中的RAPIDIJSON(文件类似${PrjoSoSoxCyPixPix}/ExtXiNC/RAPIDJSON/*H)。,c++,ios,cocoapods,podspec,C++,Ios,Cocoapods,Podspec,如果我将其包含在如下源文件中: s.source_files = utils/*{cpp,h}', 'handler/*{cpp,h}','ext_inc/**/*h' ../utils/json_serializer.h:8:10: fatal error: 'rapidjson/prettywriter.h' file not found 当我尝试使用以下工具编译库时: pod lib lint——详细报告-base.podspec 我会遇到如下错误: s.source_files =

如果我将其包含在如下源文件中:

s.source_files = utils/*{cpp,h}', 'handler/*{cpp,h}','ext_inc/**/*h'
 ../utils/json_serializer.h:8:10: fatal error: 'rapidjson/prettywriter.h' file not found
当我尝试使用以下工具编译库时:

pod lib lint——详细报告-base.podspec

我会遇到如下错误:

s.source_files = utils/*{cpp,h}', 'handler/*{cpp,h}','ext_inc/**/*h'
 ../utils/json_serializer.h:8:10: fatal error: 'rapidjson/prettywriter.h' file not found
这些错误是由以下事实引起的:标题包括:

#include "rapidjson/prettywriter.h"
如果我将其更改为:

#include "prettywriter.h"
。。。但这是包含rapidjson这样的外部库的错误方式,它根本不可移植(同一个库也是android应用程序的核心,所以我应该尽可能保持跨平台)

我尝试使用podfileprivate\u header\u path并使用以下键添加xcconfig来避免此问题:

'HEADER_SEARCH_PATHS' => 'ext_inc'
。。。但什么都不管用


据我所知,cocoapods从podspec文件中构建一个xcode项目,并使用模块映射来映射所有源文件和头文件,就像它们都在一个目录中一样,在这种情况下,我的头文件包含一个路径分隔符。。。有一种方法可以在模块映射中“保存”带有路径的标题?

经过几天的努力,我找到了一个解决方案

解决方案需要多个步骤

  • 必须在podspec文件中指定要保留的路径
  • 然后,您必须在pod验证(pod lint/pod repo push)中使用的标题搜索路径中指定查找标题的位置
  • 然后,您必须在最终应用程序的头搜索路径中指定头所在的位置
  • pod lib lint/pod repo push应使用选项--跳过导入验证运行
因此,考虑到您希望访问位于pod项目存储库内ext_inc内的rapidjson/prettywriter.h,我必须这样做:

注意:spec是ruby myproject.podspec中的对象

   spec.preserve_paths = 'ext_inc/**'
   spec.pod_target_xcconfig = {
       'HEADER_SEARCH_PATHS' => "\"" + __dir__ + "/ext_inc\""
   }
   spec.xcconfig = {
       'HEADER_SEARCH_PATHS' => "\"${PODS_ROOT}/report-base/ext_inc\""
   }

奇怪的是,我需要使用ruby技巧使用\uuuu dir\uuuu进行构建,因为这是使用pod lib lint(本地存储库)和使用pod repo push(动态克隆存储库)的唯一方法.

为什么不只更改
附加Include目录
项目参数?因为现在,我想它的定义是这样的:
../rapidjson/
这就是为什么它在编写
时可以工作#包括“prettywriter.h”
而不是在编写
时#包括“rapidjson/prettywriter.h”
标题(搜索路径是“附加包含标题”的xcconfig名称)您的
头\u搜索\u路径
必须设置为绝对路径,如下所示:
${PROJECT\u SOURCE\u path}/ext\u inc/
,而不仅仅是这样
ext\u inc
PROJECT\u SOURCE\u path环境变量未配置。。。我在cocoapods文档中找不到该变量的正确名称…
${PROJECT\u SOURCE\u PATH}
(谁代表
附加包含目录
)必须是IDE的变量,不能是类似
路径、用户名等环境变量。因为它的值会根据项目源的路径而变化。示例:如果将项目复制到
G:\myProject
${project\u SOURCE\u PATH}=G:\myProject