我可以编辑默认的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
答案 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'