【问题标题】:Is it possible to have visual studio check whether or not the project will compile with g++?是否可以让 Visual Studio 检查项目是否可以使用 g++ 编译?
【发布时间】:2016-12-13 15:42:56
【问题描述】:

由于 C++ 目前使用头文件,有时一个头文件包含另一个头文件而您没有注意到它,因为代码可能使用一个编译器编译而不是另一个编译器,或者可能一个功能在一个编译器中实现但不是另一个,所以,我想知道是否有办法让 Visual Studio 检查项目是否会以某种方式同时使用 VS 编译器和 g++ 进行编译?还是我每次都必须用两个编译器手动重新编译?如果我必须使用两个编译器重新编译,如何使用 Visual Studio 自动执行该过程,这样我就不必手动进行?

【问题讨论】:

  • 解决方案是包含您需要的标题。
  • @juanchopanza 由一个编译器而不是另一个编译器实现的功能呢?跟踪它们很乏味,我想自动化这个过程。
  • 您询问的是标题,而不是非标准功能。 C++ 标准指定了每个名称在哪些头文件中声明或定义。
  • @juanchopanza 我也确实询问过功能。而且我不是在谈论非标准的。
  • 尝试使用 cmake 生成 MSVS 解决方案文件和 Makefile。您需要安装 g++ 和各种 gnu 工具(尝试 cygwin)才能通过 Makefile 构建。

标签: c++ visual-studio visual-c++


【解决方案1】:

gcc 的开发周期比 MS Visual Studio 快。所以问 Visual Studio “我的代码会被 g++ 正确编译吗?”毫无意义——它永远不会知道最新版本的 gcc 有哪些功能和错误修复。

另外,问这样的问题根本没有意义——如果你想知道“如果我做 X 会发生什么”,那就做 X!

我猜你真正想知道的是“我的#include 指令是否与 C++ 标准兼容?”。 MS Visual Studio 只是一个实现——它不是一个可移植性检查工具。它尽最大努力编译代码并正确执行,这本身就是一项伟大的任务(c++ 很难编译)。

gcc 是 c++ 的另一种实现,有自己的头文件。实际上,根据我的经验,mingw c++ 标头更“简约”,也就是说,它们尽可能不包含彼此。我的猜测是,他们试图最小化不使用预编译头文件的系统的编译时间,而 MS Visual Studio 将预编译头文件视为一项基本功能。

所以最好使用 gcc/mingw 作为您的“标准合规性”检查。

【讨论】:

  • 我听说过模块,它们能解决这个问题吗?
【解决方案2】:

VS2015 支持 clang 编译器,一般是三者中最兼容的编译器。你可以用 clang 编译你的代码。

区分编译器和标准库实现不是一回事很重要。也就是说,您可以将编译器与随不同工具链一起提供的标准库混合和匹配。因此,使用 clang 编译不会发现标准库实现中存在差异的问题。

为此,您必须链接并提供要链接的标准库实现的标头。 Visual Studio,默认情况下链接到它自己的运行时并包含 msvc 运行时标头,您必须更改项目配置才能实现它,但它应该是可能的。但是,使用目标平台自己的工具链简单地编译它会少很多麻烦。

【讨论】:

  • 我从未使用过它,但文档表明情况正好相反——clang 支持 VS(他们为此付出了额外的努力)
  • MSVC IDE 支持运行 clang 编译器。 clang 编译器支持 MSVC 对 C++ 的扩展。
猜你喜欢
  • 2010-12-30
  • 2020-03-30
  • 1970-01-01
  • 1970-01-01
  • 2021-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多