2

我想编译项目,但我有错误:

[  9%] Building CXX object CMakeFiles/task2.dir/main.cpp.o
cc1plus: error: unrecognized command line option "-Wno-unused-result"
make[2]: *** [CMakeFiles/task2.dir/main.cpp.o] Error 1
make[1]: *** [CMakeFiles/task2.dir/all] Error 2
make: *** [all] Error 2

OSX Mountain Lion,gcc 版本为 (MacPorts gcc48 4.8.1_3) 4.8.1

由 CMake 2.8-12 完成的 Makefile

你能帮我吗?

4

1 回答 1

7

您正在(直接或通过makefile)-Wno-unused-result使用(我认为)gcc编译器的命令行选项。但是,gcc 不识别该选项,该选项(我再次假设)旨在抑制有关不使用计算结果的警告。使用 gcc 您应该改用 option -Wno-unused-value

但是请注意,(与几乎所有警告一​​样)这是一个有用的警告,不应被抑制或忽略。如果不使用计算的结果,则整个计算可能是多余的,可以省略而没有效果。事实上,编译器可能会将其优化掉,前提是它可以确定它没有副作用。例如

int foo1(double&x)   // pass by reference: we can modify caller's argument
{
  int r=0;
  // do something to x and r
  return r;
}

int foo2(double x)   // pass by value: make a local copy of argument at caller
{
  return foo1(x);    // only modifies local variable x
}

void bar(double&x)
{
  int i=foo1(x);     // modifies x
  int j=foo2(x);     // does not modify x
  // more code, not using i or j
}

这里ijinbar()都没有使用。foo1()但是,不允许优化对 away 的调用,因为该调用也会影响x,而该调用foo2()没有副作用。因此,为了避免警告,只需忽略未使用的结果并避免不必要的计算

void bar(double&x)
{
  foo1(x);  // ignoring any value returned by foo1()
            // foo2(x) did not affect x, so can be removed
  // more code
}
于 2013-10-19T10:29:43.667 回答