c++ - 如何使用VS编译器将预处理文件编译成目标文件

标签 c++ visual-studio compilation cl

cl.exe(Visual Studio C/C++ 语言编译器)使用/P 标志将源文件编译为预处理文件,例如cl/P Source.c 创建 Source.i

我想将这个 Source.i(不是 Source.c)编译成 Source.obj。我应该怎么做?找不到将预处理文件作为输入的标志。

最佳答案

您不需要做任何特别的事情。它是一个有效的 C++ 源文件,只用于您的编译器。 (虽然它不会是一个可移植的源文件,因为所有工具链自己的标准库 gubbins 以及其他任何东西都已扩展。)

这里唯一的技巧是,“中间”步骤通常由前端为您完成,获取经过预处理的源代码并将其传递给“真正的”编译器。但您仍然可以自己做。

但是,您可能希望重命名它,使其具有类似 C++ 的良好扩展名。否则,您可以通过 /Tp强制您的文件被视为 C++,无论扩展名如何。 (对于 GCC,这将是 -x c++。)

另一件需要注意的事情是,它仍然会在你的文件上运行一个预处理步骤,不知道它不再需要(所有的 preproc 指令已经在你的第一步中被扩展),所以这有点浪费额外的时间。但这不是(或不应是)典型的工作流程。

cl /P Source.c
cl /Tp Source.i

关于c++ - 如何使用VS编译器将预处理文件编译成目标文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56460348/

相关文章:

wcf - 根据配置更新服务引用地址?

c++ - glGenBuffers 访问冲突异常

c++ - 如何在 SDL 中进行硬件加速 Alpha 混合?

c++ - 检测 `boost::math::tools::brent_find_minima()` 的错误输入

c++ - 在 C++ 类对象中初始化指向父类的静态指针

c# - 如何从 StackTrace 获取正确的行号?

compilation - 编译语法时出错

visual-studio - "Activate TC Settings"有什么作用?

c++ - 从现有项目(VS)创建静态库

netbeans - Vaadin 在 NetBeans 中编译小部件(插件)