【发布时间】:2020-06-16 17:57:24
【问题描述】:
我在创建 podspec 文件以从 iOS 应用程序中提取 C++ 库时遇到一些问题。
实际上我的主要问题是标题,我的 C++ 库依赖于 ext_inc 目录中库存储库中包含的 rapidjson(文件类似于 ${PROJECT_SOURCE_PATH}/ext_inc/rapidjson/*h)。
如果我将它包含在这样的源文件中:
s.source_files = utils/*{cpp,h}', 'handler/*{cpp,h}','ext_inc/**/*h'
当我尝试编译库时:
pod lib lint --verbose report-base.podspec
我收到这样的错误:
../utils/json_serializer.h:8:10: fatal error: 'rapidjson/prettywriter.h' file not found
错误是由于标题包含为:
#include "rapidjson/prettywriter.h"
如果我将其更改为:编译将继续:
#include "prettywriter.h"
...但是包含像 rapidjson 这样的外部库是错误的方式,而且它根本不可移植(同一个库也是 android 应用程序的核心,所以我应该尽可能地保持跨平台)。
我尝试使用 podfile private_header_path 并使用密钥添加 xcconfig 来避免此问题:
'HEADER_SEARCH_PATHS' => 'ext_inc'
...但没有任何效果。
据我所知,cocoapods 从 podspec 文件构建了一个 xcode 项目,并使用模块映射来映射所有源文件和头文件,就像它们都在一个目录中一样,并且在这个上下文我的标题包含路径的事实打破了一切......有一种方法可以在模块映射中“保存”带有路径的标题?
【问题讨论】:
-
为什么不只更改
Additionnal Include Directories项目参数?因为现在,我想它是这样定义的:.../rapidjson/这就是为什么当你写#include "prettywriter.h"而不是当你写#include "rapidjson/prettywriter.h"时它工作的原因 -
HEADER_SEARCH_PATHS 是“附加包含标头”的 xcconfig 名称
-
您的
HEADER_SEARCH_PATHS必须设置在绝对路径中,如下所示:${PROJECT_SOURCE_PATH}/ext_inc/而不仅仅是这样ext_inc -
PROJECT_SOURCE_PATH 环境变量未配置...我在 cocoapods 文档中找不到该变量的正确名称...
-
${PROJECT_SOURCE_PATH}(代表Additionnal Include Directories)必须是你的IDE的一个变量,不能是像PATH, USERNAME, ...这样的环境变量。因为它的值会根据项目源的路径而变化。示例:如果您将项目复制到G:\myProject${PROJECT_SOURCE_PATH} = G:\myProject