如何编辑默认的makefile

Md *_*man 2 c++ linux makefile

我可以编辑默认的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
Run Code Online (Sandbox Code Playgroud)

5go*_*der 5

您可以传递其他参数,以make覆盖默认值.

$ make [TARGET]... [VARIABLE=VALUE]...
Run Code Online (Sandbox Code Playgroud)

在您的情况下,您希望将-std=c++11开关添加到C++编译器.C++编译器的标志存储在名为的变量中CXXFLAGS.所以你可以试试这个.

$ make a CXXFLAGS='-std=c++11'
Run Code Online (Sandbox Code Playgroud)

注意,变量CPPFLAGS持有标志为C++编译器,但为C(和C++)的预处理器.因此,如果将-std=c++11开关添加到它,如果用它调用C编译器,你会得到一个惊喜.

实际上,由于-std交换机从根本上修改了编译器接受的语言,我更愿意将其视为编译器标志而不是编译器选择,因此我更喜欢覆盖CXX包含C++编译器名称的变量.

$ make a CXX='g++ -std=c++11'
Run Code Online (Sandbox Code Playgroud)

这还有一个优点,就是保留任何其他编译器标志,例如-Wall -O2 -g或者你有什么.

  • 不要忘记您可以使用`+ =`添加到编译器标志.像这样:`CXXFLAGS + =' - std = c ++ 11'` (2认同)