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