我应该如何使用英特尔的 Windows 编译器在命令行上禁用 C++0x 和/或 C++11?

Posted

技术标签:

【中文标题】我应该如何使用英特尔的 Windows 编译器在命令行上禁用 C++0x 和/或 C++11?【英文标题】:How should I disable C++0x and/or C++11 on the command line with Intel's Windows compiler? 【发布时间】:2013-11-29 14:05:56 【问题描述】:

我的跨平台项目上的构建系统有一个用于英特尔 Windows C++ 的命令行,由于检测到编译器功能集,它可能有也可能没有 /Qstd=c++0x。对于大多数代码库来说,这很有效,但是对于少数 CUDA 文件,我需要禁用最新的 C++ 方言以适应 nvcc 包装编译器的约束。

我应该如何在命令行末尾使用 /Qstd=c++98 或 /Qnostd=c++0x 之类的语句,以便它覆盖任何早期的 C++ 方言规范?

编辑:在了解到这些标志实际上是用于英特尔编译器的之后,我发现附加 /Qstd=c++98 可能是正确的方法。

【问题讨论】:

【参考方案1】:

MSVC 不能。每个 MSVC 版本都期望在两个或三个标准之间有自己的解释,而你却被它困住了。

您引用的选项适用于英特尔编译器(请参阅here)。如果可能的话,我建议使用英特尔编译器。

我确实看不到在 C++ 编译器中禁用最近的方言将如何取悦 nvcc 包装器编译器...只要不要编写 C++11 代码,你会没事的,对吧?

【讨论】:

感谢英特尔的提示。我稍后会编辑问题。非 CUDA 代码根据编译器已知能够执行的操作有条件地使用或不使用 C++11。因此,我正在寻找一种方法来增加少量 CUDA 代码的标志,以强制主机编译器方言为 C++98,以便使用正确的 std 头文件。我可以强制将整个东西编译为 C++98,但这太过分了!同样,为每个非 CUDA 文件增加标志以添加 std=c++0x 会很丑陋。

以上是关于我应该如何使用英特尔的 Windows 编译器在命令行上禁用 C++0x 和/或 C++11?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 DPC++ 编译器选项中指定 C++ 标准版本?

如何让 gcc 为 gprof 生成信息?

如何将英特尔 C++ 编译器与 CUDA nvcc 一起使用?

我应该将哪些文件复制到我的项目中以使用 ImageMagick?或如何在 Windows 上使用 MinGW 编译 ImageMagick?

Windows 下 Visual Studio 2012 / Intel 编译器的 C++ 双精度失败

启用英特尔Fortran时“找不到psxevars命令”