Objective-C 语法检查器
Posted
技术标签:
【中文标题】Objective-C 语法检查器【英文标题】:Objective-C syntax checker 【发布时间】:2009-09-22 23:07:41 【问题描述】:是否有 ?
我尝试过gcc -fsyntax-only
,但它并不是真正的“仅语法”。如果在引用外部框架的单个实现文件上运行,它仍然会产生错误。
我正在寻找可以对单个头文件或实现文件执行语法检查而无需尝试链接或生成目标文件的东西。
gcc
可以使用我不知道的其他标志来执行此操作,还是有其他工具可以完成此任务?
我想从命令行执行此操作。 xcodebuild 可以为单个文件执行此操作吗?为整个项目运行 xcodebuild 来检查一个文件的语法有点多。
【问题讨论】:
【参考方案1】:如果不知道您正在使用的框架的头文件,它就无法检查语法。您需要使用 -framework 标志来包含相关的头文件。
【讨论】:
我认为您的意思是 -iframework 。 gcc.gnu.org/onlinedocs/gcc/…【参考方案2】:您可以尝试改用 clang -fsyntax-only,尤其是在您使用 10.6/Xcode 3.2 时。 Clang/LLVM 在解析器和编译器链的其他部分之间有更好的分离。您可以在 /Developer/usr/bin 中找到 clang。
【讨论】:
Clang 报告了与 gcc 相同的错误。我只希望它检查语法,我不希望它抱怨,因为它找不到我包含在头文件中的框架。 您的问题是框架包含您需要的标头,并且在任何 C 派生语言中,您必须从标头中获取数据才能完全检查语法。否则,您将缺少宏定义、类型定义和其他有助于给定编译单元语法正确性的东西。我会尝试添加 -framework 选项或使用 -I 拉入框架的 Headers 目录,例如 -I/Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/Foundation.framework/Headers for the Foundation框架)【参考方案3】:因此,在浏览了 gcc
手册页后,我发现了 -F
标志,它允许您将框架目录添加到目录列表中 gcc
搜索头文件。
这解决了我的问题。
像这样使用它:gcc -fsyntax-only -ObjC -F/Path/To/A/Framework -F/Path/To/Another/Framework File.m
【讨论】:
【参考方案4】:您可以使用 Build->Compile (cmd-K) 在 Xcode[1] 中编译单个文件,这实际上是一种语法检查(没有链接步骤)。
[1] 我假设您使用的是 Xcode,因为在没有 OS X(实际上是 Cocoa 框架)的情况下使用 Objective-C 毫无意义。
【讨论】:
我想从命令行执行此操作。 xcodebuild 可以为单个文件执行此操作吗?为整个项目运行 xcodebuild 来检查一个文件的语法有点多。我已经相应地修改了我原来的问题。 正如 Benno 提到的,clang 可能会有所帮助,但我不确定。不知道编译步骤是否只能通过xcodebuild调用。 他特别要求在不生成或链接目标文件的情况下进行仅语法检查。虽然您的解决方案没有链接,但它确实会生成目标文件。然而,斯蒂芬的回答几乎是正确的(应该使用 -iframework 而不是 -framework)。以上是关于Objective-C 语法检查器的主要内容,如果未能解决你的问题,请参考以下文章