如何在Xcode中更改MyFramework_vers.c的编译标志?

时间:2015-02-21 08:56:00

标签: objective-c xcode linker clang

启用Apple通用版本控制后,Xcode会自动生成MyFramework_vers.c中的DERIVED_SOURCES_DIR文件,该文件包含定义为const unsigned char[]const double的版本字符串和数字。

但是,启用-Wmissing-variable-declarations-Weverything的一部分)后,会产生警告

  

以前没有非静态变量'MyFrameworkVersionString'的外部声明   以前没有非静态变量'MyFrameworkVersionNumber'的外部声明

似乎可能的解决方案是:

  • -Wno-missing-variable-declarations添加到此文件的cflags
  • 在变量定义
  • 上方添加extern声明
  • 添加#import,从伞形标题中提取extern声明

但由于该文件位于DerivedSources并且不是Compile Sources阶段的成员,因此我无法弄清楚如何执行这些操作。我错过了什么?

(我找到了VERSION_INFO_EXPORT_DECL设置,允许我标记变量extern,但后来我从-Wextern-initializer得到“extern变量有一个初始值设定项”警告,以便没有帮助。)

1 个答案:

答案 0 :(得分:3)

我不知道修改此文件的编译器参数的方法,但可以通过滥用VERSION_INFO_EXPORT_DECL来解决警告问题。将值设置为文字换行符,后跟#import "HeaderWithExternDeclarations.h"和另一个文字换行符。在pbxproj中,它看起来应该是这样的:

VERSION_INFO_EXPORT_DECL = "\n#import \"MyFramework.h\"\n";

如果要导入包含Objective-C的标头,您还需要将VERSION_INFO_FILE更改为扩展名为.m的值,例如MyFramework_vers.m,以便将生成的文件编译为Objective- C源。

或者,您可以使用相同的hack来插入编译指示以禁用警告:

VERSION_INFO_EXPORT_DECL = "\n#pragma clang diagnostic ignored \"-Wmissing-variable-declarations\"\n";