启用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变量有一个初始值设定项”警告,以便没有帮助。)
答案 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";