繁体   English   中英

如何使用Makefile执行C ++ 11

[英]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或分号的语句是具有目标%和先决条件%.ccg++ ,- -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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM