cl.exe(Visual Studio C/ C++ 编译器)将源文件编译为带有/P标志的预处理文件,例如cl /P Source.c创建Source.i我想把这个Source.i(不是Source. c)编译成Source. obj。我该怎么做?找不到将预处理文件作为输入的标志。
cl /P Source.c
knpiaxh11#
你不需要做任何特别的事情。它是一个有效的C源文件,只是去你的编译器。(尽管它不会是一个可移植的源文件,因为所有工具链自己的标准库gubbins和其他东西都已经扩展了。这里唯一的技巧是,通常“中间”步骤由前端完成,获取预处理的源代码并将其传递给“真实的”编译器。但你还是可以自己做。但是,您可能希望重命名它,使其具有类似C的扩展。否则,您可以传递/Tp以强制将文件视为C++,而不管扩展名如何。(对于GCC,这将是-x c++。另一件需要注意的事情是,它仍然会对你的文件运行一个预处理步骤,而不知道它不再需要了(所有的preproc指令都已经被你的第一步扩展了),所以这有点浪费额外的时间。但这不是(或不应该是)典型的工作流程。
/Tp
-x c++
cl /P Source.ccl /Tp Source.i
cl /Tp Source.i
1条答案
按热度按时间knpiaxh11#
你不需要做任何特别的事情。它是一个有效的C源文件,只是去你的编译器。(尽管它不会是一个可移植的源文件,因为所有工具链自己的标准库gubbins和其他东西都已经扩展了。
这里唯一的技巧是,通常“中间”步骤由前端完成,获取预处理的源代码并将其传递给“真实的”编译器。但你还是可以自己做。
但是,您可能希望重命名它,使其具有类似C的扩展。否则,您可以传递
/Tp
以强制将文件视为C++,而不管扩展名如何。(对于GCC,这将是-x c++
。另一件需要注意的事情是,它仍然会对你的文件运行一个预处理步骤,而不知道它不再需要了(所有的preproc指令都已经被你的第一步扩展了),所以这有点浪费额外的时间。但这不是(或不应该是)典型的工作流程。