【问题标题】:MSVS C++, how to compile already-preprocessed file with *.i extension?MSVS C++,如何编译带有 *.i 扩展名的已预处理文件?
【发布时间】:2012-01-26 21:42:53
【问题描述】:

这里有相关问题: How can I run the MSVC preprocessor and compiler in two separate steps?

我明确地将MyFile.cpp(未编译)预处理为MyFile.i。我想稍后“编译”该文件(明确跳过预处理会很好,但正如相关问题所暗示的那样,这听起来像是 MSVS 不可能。)

问题:MyFile.i 是“无法识别的扩展名”,cl.exe 假定它是“目标文件”,导致“无操作”。 (请参阅 Microsoft 警告:http://msdn.microsoft.com/en-us/library/zfsbakc5(v=VS.90).aspx,此警告适用于 MSVS 2005、2008、2010)。

我找不到表明它是“源文件”(不是目标文件)的开关。相关问题明确使用了“MyFile_preprocessed.cpp”约定,但我真的更愿意使用(更通用的)MyFile.i 约定。

问题:有没有可以用 MSVS 编译 MyFile.i 的标志?

【问题讨论】:

  • 非常感谢您提出这个问题。微软这些天是迟钝得无可救药。 MSDN 只是对 .i 文件说“重新提交编译”,而没有具体说明如何这样做

标签: c++ visual-c++ compiler-construction c-preprocessor compiler-flags


【解决方案1】:

cl.exe 有这两个标志

  • /Tc<source file>将文件编译为.c

  • /Tp<source file>将文件编译为.cpp

允许您将具有任意扩展名的文件编译为 cc++ 文件

我尝试用以下内容编译main.i

#include <iostream>

using namespace std;

int main()
{
    cout << "Hello world \n";
    return 0;
}

使用cl /Tp main.i,它可以像宣传的那样工作

【讨论】:

  • 非常感谢您的回答。我无法理解为什么在宇宙中没有 MSDN 页面告诉你这是如何编译“.i”文件。它只是说您需要“重新提交.i文件”进行编译,这就像奶牛上的一对奶一样无用。
  • 如何将预处理器文件(X.hpp.i 文件)包含在另一个源文件(.cc/.cpp)中?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-17
  • 2015-07-06
  • 1970-01-01
  • 1970-01-01
  • 2021-01-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多