如何为pod生成的项目设置CLANG_ENABLE_MODULES = NO?

时间:2017-05-27 04:15:11

标签: ios objective-c compilation cocoapods

我试图将ccache集成到我的项目中,该项目不支持clang模块。所以我在我的主要xcode项目中禁用了clang模块,如下所示。

CLANG_ENABLE_MODULES

但是对于cocoapods生成的项目文件,默认情况下会启用clang模块。即使我更改此设置,cocoapods也会在下一个pod update更改它。

有没有让pod知道我想在苹果推出clang模块之前回归旧行为?关闭CLANG_ENABLE_MODULES,并自动链接其他pod生成的静态库使用的系统框架,如AVFoundation,MapKit等

2 个答案:

答案 0 :(得分:0)

你是中国开发者吗?你以前见过这篇文章吗? https://zhuanlan.zhihu.com/p/27584726

这是一个使用ccache加速Xcode构建过程的教程。它还提供了config cocoapods

我在这里复制了代码,让那些不懂中文但遇到同样问题的人知道如何解决这个问题。

post_install do |installer_representation|
  installer_representation.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      #关闭 Enable Modules (Translation:Close Enable Modules)
      config.build_settings['CLANG_ENABLE_MODULES'] = 'NO'

      # 在生成的 Pods 项目文件中加入 CC 参数,路径的值根据你自己的项目来修改(Translation: Add CC parameter to pods project. You can change the path to whatever you want.)
      config.build_settings['CC'] = '$(PODS_ROOT)/../ccache-clang' 
    end
  end
end

但此配置仅关闭CLANG_ENABLE_MODULES。 据我所知,使用ccachecocoapods时无法链接系统框架。

希望它有所帮助。

答案 1 :(得分:0)

如果您要创建自定义pod,请在您的podspec文件中编写如下内容,

Pod::Spec.new do |s|

    # some configuration

    s.pod_target_xcconfig = {
      'OTHER_LDFLAGS' => '-lObjC', # if you created a category for a class from other lib
      'CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES' => 'YES',
      'CLANG_ENABLE_MODULES' => 'NO',  # here is what you want
      'CLANG_WARN_DOCUMENTATION_COMMENTS' => 'NO',
      'GCC_C_LANGUAGE_STANDARD' => 'gnu17'
    }
end