Makefile编译多个cpp文件
1:首先:用g++编译.cpp文件的方法:
可以直接用:
g++ 文件名.cpp
生成一个名为 “文件名.out” 的可执行文件
其原理为:
先由:
g++ -c 文件名.cpp:生成一个名为 “文件名.o” 的文件
再由:
g++ 文件名.o:生成一个名为 “文件名.out” 的可执行文件
另外,可以用:
g++ -c 文件名.cpp -o 新文件名.cc:生成一个被命名成 “新文件名” 的.o文件
g++ 文件名.o -o 新文件名:生成一个名为 “新文件名” 的可执行文件
例如:这里有一个a.cpp文件
里面的内容为:
#include<stdio.h>
int main(){
printf("随便输出点东西");
return 0;
}
在该文件所在的目录下打开终端,输入:
即可生成一个可执行文件a.out:
输入:
可生成一个名为lalala的可执行文件
在终端输入:./ a.out 即可运行该程序 (输入./ lalala 也可以)
2:有多个.cpp文件时,用Makefile编译更加方便,下面是Makefile的写法
例如:这里有2个.cpp文件组成的程序
我的Makefile应该这样写:
#第一个maincc是自己随便起的要生成的可执行文件的名字,main.o和circle.o是生成maincc要用到的文件
maincc:main.o circle.o
g++ circle.o main.o -o maincc #用g++把circle.o和main.o两个文件编译成可执行文件
#并用 -o 将其命名为maincc
#这一步是main.o的生成,main.cpp是生成main.o要用到的文件
main.o:main.cpp
g++ -c main.cpp #用g++ -c 把main.cpp编译成.o文件
#这一步是circle.o的生成,circle.cpp是生成circle.o要用到的文件
circle.o:circle.cpp
g++ -c circle.cpp #用g++ -c 把circle.cpp编译成.o文件
加上注释有点乱,这是未加注释的源文件:(第2,4,6行的缩进是一个Tab键)
写完保存,直接在终端输入:make 即可编译这两个.cpp文件并生成一个可执行文件maincc
如果,你的文件名字可以不叫Makefile,也可以叫abcdef
编译的时候在终端输入:make -f abcdef 即可
编译完成生成的.o文件用不到,可以加两句话自动把.o删掉(编译时要在终端里输入make clean)
另外,生成.o文件是为了加深理解,也可以直接用g++将两个.cpp文件编译成一个可执行文件
-----------------------------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------------------------
在Linux下使用GCC/G++来编译执行C/C++代码
C++代码编译:
g++ -c main.cpp -o main.o
g++ -c Circle.cpp -o sub.o
g++ main.o Circle.o -o main
./main
注:用-c 编译出各自的目标文件,在合并编译出可执行文件main
C语言编译同上,把g++换成gcc即可,如下:
gcc -c main.c -o main.o
gcc -c sub.c -o Circle.o
gcc main.o sub.o -o main
./main
下面举例C++的示例代码(C语言省略):
文件1:main.cpp
#include"Circle.h"
#include<iostream>
using namespace std;
int main(int argc,char *argv[])
{
Circle c(3);
cout<<"Area="<<c.Area()<<endl;
c.display();
return 0;
}
文件2源文件:
#include"Circle.h"
#include<iostream>
using namespace std;
Circle::Circle()
{this->r=5.0;}
Circle::Circle(double R)
{this->r=R;}
double Circle::Area()
{return 3.14*r*r;}
void Circle::display()
{cout<<"Area="<<Area()<<endl;};
文件2头文件:
#ifndef CIRCLE_H
#define CIRCLE_H
class Circle
{
private:
double r;
public:
Circle();
Circle(double R);
double Area();
void display();
};
#endif
更多文件时,编译更多,使用makefile文件更佳
编写makefile文件后,在当前目录下,在命令行$make执行即可
makefile文件示例:
#explain
main:main.o Circle.o
g++ main.o Circle.o -o main
Circle.o:Circle.cpp
g++ -c Circle.cpp -o Circle.o
main.o:main.cpp
g++ -c main.cpp -o main.o
多个文件时,可在Makefile里继续追加相应源文件的编译。
---------------------
原文:https://blog.youkuaiyun.com/u012906277/article/details/54426151
原文:https://blog.youkuaiyun.com/qq_41748900/article/details/82316662