Xcode 7 - 宏名称必须是标识符

Posted

技术标签:

【中文标题】Xcode 7 - 宏名称必须是标识符【英文标题】:Xcode 7 - macro name must be an identifier 【发布时间】:2015-09-27 11:44:03 【问题描述】:

我已升级到 Xcode 7,但突然间我的一个目标无法构建,并显示“宏名称必须是标识符”消息。这个目标的调试配置构建得很好,我可以在设备上运行它,但是发布配置没有构建。

错误指向目标的 .pch 文件,但相同的 .pch 文件对于许多其他目标(包括已发布的目标)都可以构建。

这是错误信息:

ProcessPCH /Users/stanislavdvoychenko/Library/Developer/Xcode/DerivedData/speedo-gagyicfwqpzsudcvwgxjqhwbgpte/Build/Intermediates/PrecompiledHeaders/speedometer-Prefix-copscroeimdxfkdvcsfifjmzires/speedometer-Prefix.pch.pch speedometer/speedometer-Prefix.pch normal armv7 c com.apple .compilers.llvm.clang.1_0.compiler cd /Users/stanislavdvoychenko/Documents/code/speedo 导出 LANG=en_US.US-ASCII export PATH="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/usr/local/bin:/ usr/bin:/bin:/usr/sbin:/sbin" /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -x c-header -arch armv7 -fmessage-length=0 -fdiagnostics-show-note-include-stack -fmacro-backtrace -limit=0 -std=gnu99 -gmodules -Wno-trigraphs -fpascal-strings -Os -fno-common -Wno-missing-field-initializers -Wno-missing-prototypes -Wunreachable-code -Wno-missing-braces -W括号-Wswitch -Wunused-function -Wno-unused-label -Wno-unused-parameter -Wunused-variable -Wunused-value -Wempty-body -Wuninitialized -Wno-unknown-pragmas -Wno-shadow -Wno-four-char-constants -Wno-conversion -Wconstant-conversion -Wint-conversion -Wbool-conversion -Wenum-conversion -Wshorten-64-to-32 -Wpointer-sign -Wno-newline-eof -DCCOOAPODS=1 -DCCOOAPODS=1 -DTAXI -D =1 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.0.sdk -fstrict-aliasing -Wdeprecated-declarations -miphoneos-version-min=7.0 -g -fvisibility =隐藏 -Wno-sign-conversion -I/Users/stanislavdvoychen ko/Library/Developer/Xcode/DerivedData/speedo-gagyicfwqpzsudcvwgxjqhwbgpte/Build/Intermediates/speedo.build/Release-iphoneos/taximeter.build/taximeter.hmap -I/Users/stanislavdvoychenko/Library/Developer/Xcode/DerivedData/speedo- gagyicfwqpzsudcvwgxjqhwbgpte/Build/Products/Release-iphoneos/include -I/Users/stanislavdvoychenko/Documents/code/speedo/Pods/Headers/Public -I/Users/stanislavdvoychenko/Documents/code/speedo/Pods/Headers/Public/GoogleMaps - I/Users/stanislavdvoychenko/Library/Developer/Xcode/DerivedData/speedo-gagyicfwqpzsudcvwgxjqhwbgpte/Build/Intermediates/speedo.build/Release-iphoneos/taximeter.build/DerivedSources/armv7 -I/Users/stanislavdvoychenko/Library/Developer/Xcode/ DerivedData/speedo-gagyicfwqpzsudcvwgxjqhwbgpte/Build/Intermediates/speedo.build/Release-iphoneos/taximeter.build/DerivedSources -F/Users/stanislavdvoychenko/Library/Developer/Xcode/DerivedData/speedo-gagyicfwqpzsudcvwgxjqhwbgpte/Build/Products/Release-iphoneos F/Users/stanislavdvoychenko/Documents/code/spe edo/Pods/GoogleMaps/Frameworks -F/Users/stanislavdvoychenko/Documents/code/speedo -DNS_BLOCK_ASSERTIONS=1 -isystem /Users/stanislavdvoychenko/Documents/code/speedo/Pods/Headers/Public -isystem /Users/stanislavdvoychenko/Documents/代码/speedo/Pods/Headers/Public/GoogleMaps -MD -MT 依赖项-MF /Users/stanislavdvoychenko/Library/Developer/Xcode/DerivedData/speedo-gagyicfwqpzsudcvwgxjqhwbgpte/Build/Intermediates/PrecompiledHeaders/speedometer-Prefix-copscroeimdxfkdvcsfifjmzires/speedometer-Prefix .pch.d -c /Users/stanislavdvoychenko/Documents/code/speedo/speedometer/speedometer-Prefix.pch -o /Users/stanislavdvoychenko/Library/Developer/Xcode/DerivedData/speedo-gagyicfwqpzsudcvwgxjqhwbgpte/Build/Intermediates/PrecompiledHeaders/speedometer -Prefix-copscroeimdxfkdvcsfifjmzires/speedometer-Prefix.pch.pch --serialize-diagnostics /Users/stanislavdvoychenko/Library/Developer/Xcode/DerivedData/speedo-gagyicfwqpzsudcvwgxjqhwbgpte/Build/Intermediates/PrecompiledHeaders/speedometer-Prefix-copscro eimdxfkdvcsfifjmzires/speedometer-Prefix.pch.dia 在来自 :334 的文件中: :4:10: 错误:宏名必须是标识符 #定义1 ^ 产生 1 个错误。

这是 .pch 文件:

#进口 #ifndef __IPHONE_4_0 #warning "此项目使用仅在 ios SDK 4.0 及更高版本中可用的功能。" #万一 #ifdef __OBJC__ #import &ltUIKit/UIKit.h> #import &ltFoundation/Foundation.h> #import "枚举.h" #万一 #define APP ((AppDelegate *)[[UIApplication sharedApplication] delegate])

我已经尝试过干净和 Xcode 重启。

如果我能更深入地挖掘并找出问题所在,我将不胜感激。

【问题讨论】:

我遇到了类似的问题,它是针对枚举的。您可以使用 enums.h 中的枚举更新您的问题吗? 我删除了“Enums.h”行,但仍然存在同样的问题。那应该是别的东西。我会分享“Enums.h”,但它很大。试图同时在项目的 git 历史中找到任何东西...... 【参考方案1】:

问题在于编译命令中的-D=1 命令行选项。您在构建设置中的某个地方有错误的值,可能在预处理器宏或其他 C 标志中。

【讨论】:

就是这样!非常感谢。我不小心重新访问了 Xcode 中的预处理器宏,并且仅为了发布配置,我设法在其中放置了一个空格:TAXI(space)=1,它在 Xcode、TAXI 和 =1 中创建了几个宏。因此-D=1。感谢您的鹰眼和智慧!【参考方案2】:

您在.pch 文件中显示的任何内容看起来都不错;它为我正确编译。但是,编译器抱怨以下代码没有为宏指定名称。 #define 必须后跟宏名称,而在您的语句中它丢失了。您能否在您的代码库中搜索#define 1 语句并进行更正。

In file included from :334:
:4:10: error: macro name must be an identifier
#define  1

附带说明,请确保您没有为APP 设置任何预处理器值,例如将APP 设置为1。要排除,请尝试使用与 APP 不同的变量。

【讨论】:

以上是关于Xcode 7 - 宏名称必须是标识符的主要内容,如果未能解决你的问题,请参考以下文章

宏定义

Xcode 7:更改产品包标识符

计算的宏名称

Xcode 7 beta 快速使用未解析的标识符

如何利用宏定义

在 xcode 7.3.1 中使用未解析的标识符“GMSPlacesClient”