如何使用 Visual Studio C/C++ 编译器 (cl.exe) 预处理我的 objective-C 代码?

How can I use the Visual Studio C/C++ Compiler (cl.exe) to pre-process my objective-C code?

我有一些旧的 Objective-C 代码,我正在尝试使用我的自定义构建框架进行编译。此构建框架预处理源文件,然后将它们编译为 C 源代码,然后使用 Cl.exe 进行其余编译。

但是,当我尝试对 VS2015 执行相同操作时,它在我的预处理阶段失败了。从 VS2015 开始,VCRuntime.h 间接包含在所有文件中,并使用更新的 C++ 功能,例如可变宏。所以我的预处理器失败了。

那么,有没有办法使用 Cl.exe 来预处理我的源代码,例如在不关心实际代码的情况下展开#includes、评估#defines 等?我尝试了 cl.exe /Tp 但没有成功。但是这个选项确实理解 #imports

我终于想通了。

cl.exe /Tp /E /I 命令可以对 objective-c (.m)c (.c) 源文件进行一些扩展预处理。然而,它无法解析少数 COM 相关代码。

然后我发现an open-source C-Pre-Processor可以成功预处理.c, .cpp and .m files。这个工具的好处是,它还支持 C++ 11 特性,例如可变参数模板等