如何输出预处理后的代码并编译它(Visual Studio)

8
我正在使用Visual Studio生成预处理器输出(.i)文件,但我也希望进行实际的构建。是否有一种标志组合,既可以输出.i文件,又不会停止编译器继续进行常规构建?
目前只涉及C++,但以后可能还要在CUDA中使用,因此更喜欢在Visual Studio内部解决问题的答案(除非它也适用于CUDA)。
这样做的目的是为了节省时间,以避免进行“项目->属性->配置属性->C/C++->预处理器->生成预处理文件 是/否”加上“重新生成”的操作。特别让我感到恼火的是预处理器必须运行两次,因此,一种在第一部分中以某种方式生成.i文件,然后在第二部分中编译该文件的解决方案也是可以的。
我正在使用的Visual Studio版本是VS 2008 Express。
4个回答

2

您可以添加自定义构建步骤或新目标,以在代码构建完成后转储预处理器输出。按照定义,转储的预处理器输出是所构建的内容。


无论如何,构建过程都必须读取文件两次?但这是最慢的部分! - Mooing Duck
只要它依赖于转储预处理器的目标,自定义目标就可以将*.i作为cpp构建。 - rerun
眨眼 哇...那可能行得通,并且由于链接器了解更多,可能会生成更有效的文件... - Mooing Duck
好的,太棒了——我成功地完成了它,而没有使用.bat文件。这是我所做的:1.将.i文件添加到项目中2.在“解决方案资源管理器”中,右键单击.i文件->配置属性->工具->C/C++编译器工具3.重新构建解决方案(Ctrl-Alt-F7)——这将失败,因为它会复制相同的编译器选项,其中包括预处理器输出4.重复步骤2,现在您应该在子树中看到所有正常的编译器选项,请选择预处理器并关闭.i文件的预处理器输出(显然)5.再次构建——现在它可以工作了——万岁! - Raffles

0

使用开关 /P 示例- cl /C sample.c

以上命令将生成一个同名的 .I 文件 (sample.I)。现在,只需将 .I 文件重命名为 .C,然后执行 cl /c 命令进行编译并生成目标文件。


0

您可以创建一个自定义的构建配置,进行预处理,然后定义一个批量构建,先构建预处理版本,然后再构建实际编译/链接版本。


好的,这听起来很理想。你所说的“自定义构建配置”,是指之前那个人提到的“自定义构建步骤”吗?如果是的话,这里有一个不错的进展 :-) - Raffles

0
如果您正在使用GNU gcc/g++编译器,则可以使用以下代码配置Makefile目标“recipe”。
gcc -save-temps -dumpbase save-foo -c foo.c

可以在终端中的gcc手册页面中找到参考资料。

man gcc

部分:

-dumpbase dumpbase

这将创建一个单独的.i文件并将"foo"编译为目标代码。该代码可以作为您的目标"goal"可执行文件的先决条件。下面的链接解释了我使用的词汇。

https://www.gnu.org/software/make/manual/html_node/Simple-Makefile.html#Simple-Makefile


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接