【问题标题】:CLion disable C++98 mode in favour of C++11CLion 禁用 C++98 模式以支持 C++11
【发布时间】:2014-09-17 20:25:19
【问题描述】:

我正在尝试在 JetBrains CLion 中仅使用 C++11 语法编译一些代码,因此我希望禁用 C++98 模式。我按照this StackOverflow question 的说明进行操作,但无法正常工作。

为了实现这个目标,我去了 ALT + SHIFT + F10 并在Program Arguments中传递了参数-std=c++11

再次构建后,C++98 模式似乎仍处于启用状态。

/cygdrive/c/Users/Zarthus/Documents/test/command.cpp: In constructor 'Command::Command(std::vector<std::basic_string<char> >)':
/cygdrive/c/Users/Zarthus/Documents/test/command.cpp:25:32: error: range-based 'for' loops are not allowed in C++98 mode
     for (std::string command : commands)
                                ^

在代码中

Command::Command(std::vector<std::string> cmds)
{
    for (std::string command : cmds)
    {
         addCommand(command);
    }
}

虽然我相当确定问题不在我的代码中(IdeoneC++11IdeoneC++98 (4.8.1)

图片:CLion Interface

我想象的是编译字符串(每个 cmets):

C:\cygwin64\bin\cmake.exe --build C:\Users\Zarthus\.clion10\system\cmake\generated\6dd8bed\6dd8bed\Debug --target testProject -- -j 4

所以它似乎没有包含我的内容。

我对其他 JetBrains IDE 没有太多经验,但据我所知,它们大多相同。

有人能复制吗?我是否应该向 JetBrains 发送反馈,表明这可能无法 100% 工作(它仍然是早期版本)?还是我只是把它搞砸了,这里有用户错误吗?

谢谢!

【问题讨论】:

  • 从未使用过 CLion,但有没有办法查看 g++ 编译器实际在做什么,即“详细”模式?这样您就可以查看您的论点是否被采纳但被忽略、从未被采纳等。
  • @PaulMcKenzie 我添加了一个 C:\cygwin64\bin\cmake.exe 字符串 - 我不确定这是否正是你要找的,但这是我能找到的最好的。至于额外的调试信息 - 我找不到这样的选项。
  • 一个IDE通常有一个窗口或某种方式,以便您可以看到编译器正在使用的整个命令行字符串。否则你是在盲目地编译。 cmake 使用一个文件,在该文件中包含编译器使用的命令字符串。基本上你需要弄清楚编译器使用的确切命令字符串,然后从那里开始工作。
  • 很明显你做错了什么,你不想将 -std=c++11 传递给你自己的程序。继续找,和 CMake 配置有关。
  • 感谢@PaulMcKenzie,我通过将add_definitions(-std=c++11) 添加到 CMakeLists.txt 的 EOF 来修复它 - 我不知道 CMake 基本上是我的“编译器”参数。谢谢!

标签: c++ c++11 ide clion


【解决方案1】:

已通过在 CMakeLists.txt 末尾添加 add_definitions(-std=c++11) 而不是在 ALT+SHIFT+F10 的命令行参数中解决此问题。

【讨论】:

  • set(CXX_STANDARD 11)set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 都不适合我,但确实如此。谢谢!
猜你喜欢
  • 1970-01-01
  • 2020-07-04
  • 2012-11-29
  • 1970-01-01
  • 1970-01-01
  • 2016-03-14
  • 2017-09-11
相关资源
最近更新 更多