【发布时间】: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++11 与 IdeoneC++98 (4.8.1))
我想象的是编译字符串(每个 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 基本上是我的“编译器”参数。谢谢!