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

How to change compilation flags for MyFramework_vers.c in Xcode?

启用 Apple 通用版本控制后,Xcode 在 DERIVED_SOURCES_DIR 中自动生成一个 MyFramework_vers.c 文件,其中包含定义为 const unsigned char[] 和 [=15] 的版本字符串和编号=].

但是,在启用 -Wmissing-variable-declarations 的情况下(-Weverything 的一部分),这会产生警告

no previous extern declaration for non-static variable 'MyFrameworkVersionString'
no previous extern declaration for non-static variable 'MyFrameworkVersionNumber'

似乎可能的解决方案是:

但我不知道如何执行这些操作,因为该文件位于 DerivedSources 中并且不是 Compile Sources 阶段的成员。我错过了什么?

(我发现 VERSION_INFO_EXPORT_DECL 设置允许我标记变量 extern,但随后我从 -Wextern-initializer 收到 "extern variable has an initializer" 警告,因此没有帮助。)

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

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

如果要导入包含 Objective-C 的 header,您还需要将 VERSION_INFO_FILE 更改为扩展名为 .m 的值,例如 MyFramework_vers.m生成的文件被编译为 Objective-C source.

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

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