[英]How to execute C++11 with makefile
我在终端ubuntu中执行命令“ make”时遇到问题。 我的makefile代码是:
all: temp p1
%: %.cc g++ -lm -lcrypt -O2 -std=c++11 -pipe $< -o $@
当然,我的文件是temp.cc和p1.cc,但是我的问题出在p1.cc,其中的代码是:
#include <bits/stdc++.h>
using namespace std;
int main(){
vector<int> vec = {4,6,8,9,8,7,1,3,4,5,0,1};
for(auto i : vec)
cout<<i<<" ";
cout<<endl;
return 0;}
我使用“ make”的错误是:
eabg97@EABG:~/P$ make
g++ p1.cc -o p1
p1.cc: In function ‘int main()’:
p1.cc:7:44: error: in C++98 ‘vec’ must be initialized by constructor, not by ‘{...}’
vector<int> vec = {4,6,8,9,8,7,1,3,4,5,0,1};
^
p1.cc:7:44: error: could not convert ‘{4, 6, 8, 9, 8, 7, 1, 3, 4, 5, 0, 1}’ from ‘<brace-enclosed initializer list>’ to ‘std::vector<int>’
p1.cc:9:11: error: ‘i’ does not name a type
for(auto i : vec)
^
p1.cc:11:2: error: expected ‘;’ before ‘cout’
cout<<endl;
^
p1.cc:12:2: error: expected primary-expression before ‘return’
return 0;
^
p1.cc:12:2: error: expected ‘)’ before ‘return’
make: *** [p1] Error 1
使用以下命令行,编译:
g++ --std=c++11 p1.cc -o p1
并且执行是可以的:
eabg97@EABG:~/P$ ./p1
4 6 8 9 8 7 1 3 4 5 0 1
请帮助我,我不明白为什么会出现问题,感谢您的支持:)
这是错误的:
all: temp p1
%: %.cc g++ -lm -lcrypt -O2 -std=c++11 -pipe $< -o $@
您应该添加一个换行符和一个初始TAB,如下所示:
all: temp p1
%: %.cc
g++ -lm -lcrypt -O2 -std=c++11 -pipe $< -o $@
(第三行的第一个字符必须是TAB字符),或者您需要插入这样的分号:
all: temp p1
%: %.cc ; g++ -lm -lcrypt -O2 -std=c++11 -pipe $< -o $@
您的makefile在做什么? 首先,make认为同一行中没有任何换行符/ TAB或分号的语句是具有目标%
和先决条件%.cc
, g++
,- -lm
, -lcrypt
等的单个模式规则。而且,因为没有配方,您基本上是在删除该模式规则(无论如何都不存在),因为没有配方的模式规则会删除该模式规则。 因此,该行基本上是无操作的,什么也不做。
那会怎样呢? Make有很多内置规则,如果您不告诉它怎么做,它会使用它来创建事物,并且有一个内置规则知道如何从.cc
文件创建程序,因此make可以使用那。 但是,当然,该内置规则没有您的任何自定义设置。
使用make的内置规则并使用标准的make变量来控制它比较简单:
CXX := g++
CXXFLAGS := -std=c++11 -pipe
LDLIBS := -lm -lcrypt
all: temp p1
如果您不想编写自己的规则,这就是您所需要的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.