如何使用VS编译器将预处理文件编译成目标文件
How to compile a preprocessed file into object file using VS compiler
cl.exe(Visual Studio C/C++ 语言编译器)使用 /P 标志将源文件编译为预处理文件,例如cl /P Source.c
创建 Source.i
我想将这个 Source.i(不是 Source.c)编译成 Source.obj。我应该怎么做?找不到将预处理文件作为输入的标志。
您不需要做任何特别的事情。它是一个有效的 C++ 源文件,只用于您的编译器。 (虽然它不会是一个可移植的源文件,因为所有工具链自己的标准库 gubbins 以及其他任何东西都已扩展。)
这里唯一的技巧是 "intermediate" 通常由 front-end 为您完成,获取预处理的源并将其传递给 "real" 编译器。但是你仍然可以自己做。
但是,您可能希望重命名它,使其具有类似 C++ 的良好扩展名。否则,您可以传递 /Tp
以强制将您的文件视为 C++,而不管扩展名如何。 (对于 GCC,这将是 -x c++
。)
另一件需要注意的事情是,它仍然会 运行 对您的文件进行预处理,而不知道它不再需要(所有 preproc 指令都已在您的第一步中展开) ,所以这有点浪费了额外的时间。但这不是(或不应该是)典型的工作流程。
cl /P Source.c
cl /Tp Source.i
cl.exe(Visual Studio C/C++ 语言编译器)使用 /P 标志将源文件编译为预处理文件,例如cl /P Source.c
创建 Source.i
我想将这个 Source.i(不是 Source.c)编译成 Source.obj。我应该怎么做?找不到将预处理文件作为输入的标志。
您不需要做任何特别的事情。它是一个有效的 C++ 源文件,只用于您的编译器。 (虽然它不会是一个可移植的源文件,因为所有工具链自己的标准库 gubbins 以及其他任何东西都已扩展。)
这里唯一的技巧是 "intermediate" 通常由 front-end 为您完成,获取预处理的源并将其传递给 "real" 编译器。但是你仍然可以自己做。
但是,您可能希望重命名它,使其具有类似 C++ 的良好扩展名。否则,您可以传递 /Tp
以强制将您的文件视为 C++,而不管扩展名如何。 (对于 GCC,这将是 -x c++
。)
另一件需要注意的事情是,它仍然会 运行 对您的文件进行预处理,而不知道它不再需要(所有 preproc 指令都已在您的第一步中展开) ,所以这有点浪费了额外的时间。但这不是(或不应该是)典型的工作流程。
cl /P Source.c
cl /Tp Source.i