如何编辑默认的makefile

时间:2015-10-20 04:28:45

标签: 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

2 个答案:

答案 0 :(得分:5)

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

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

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

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

请注意,变量CPPFLAGS not 不会保存C ++编译器的标志,而是保存C(和C ++)预处理器的标志。因此,如果你向它添加-std=c++11开关,如果用它调用C编译器,你会得到一个不好的惊喜。

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

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

这样做的另一个好处就是你可以保留任何其他编译器标志,例如-Wall -O2 -g或者你有什么。

答案 1 :(得分:1)

如果您还没有使用源代码在目录中创建makefile,那么空文件将用于启动。

在您的makefile中,添加一行

CXXFLAGS='-std=c++11'