我可以编辑默认的makefile吗?我想将-std=c++11标志添加到默认的makefile中,以便make命令将编译并生成C++ 11程序。

例如,当前,当我尝试使用make命令编译程序时,会发生以下错误:

g++ a.cpp -o a

a.cpp: In function ‘int main()’:

a.cpp:118:12: error: ISO C++ forbids declaration of ‘it’ with no type [-fpermissive]

  for(auto &it : v) cout << it << endl;
            ^

a.cpp:118:17: warning: range-based ‘for’ loops only available with -std=c++11 or -std=gnu++11
  for(auto &it : v) cout << it << endl;
                 ^

<builtin>: recipe for target 'a' failed

make: *** [a] Error 1

最佳答案

您可以将其他参数传递给make,这些参数将覆盖默认值。

$ make [TARGET]... [VARIABLE=VALUE]...

在您的情况下,您想将-std=c++11开关添加到C++编译器。 C++编译器的标志存储在名为CXXFLAGS的变量中。所以您可以尝试一下。

$ make a CXXFLAGS='-std=c++11'

请注意,变量CPPFLAGS不保存C++编译器的标志,而是C(和C++)预处理器的标志。因此,如果将-std=c++11开关添加到其中,则使用C编译器对其进行调用将使您大吃一惊。

实际上,由于-std开关从根本上修改了编译器接受的语言,因此我更喜欢将其视为编译器选择而不是编译器标志,因此我更喜欢覆盖保存C++编译器名称的CXX变量。

$ make a CXX='g++ -std=c++11'

这还有一个优点,就是您保留了其他任何编译器标志,例如-Wall -O2 -g或您拥有的标志。

关于c++ - 如何编辑默认的makefile,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33228018/

10-16 18:10