Makefile
为什么要使用Makefile
mo@mo-virtual-machine:~/Operatingsystem/helloworld$ vim hello.cpp
#include<iostream>
using namespace std;
int main(){
cout<<"Hello world!"<<endl;
return 0;
}
//the first program hello.c
#include<stdio.h>
int main(){
printf("Hello, world!\n");
return 0;
}
在Linux中运行c/c++程序的方式:
gcc filename -o filename
gcc hello.c -o hello
./hello
g++ hello.cpp -o hellocpp
./hellocpp
这是我们运行一个文件的方式。
如果说我们有很多这样的程序需要运行,这样运行我们的程序,就会显得十分的繁琐。
如果我们的一个程序需要调用其他程序文件,我们又应该解决呢?
运行一个包含头文件的程序
//main.c program
#include"stdio.h"
#include"max.h"
#include"min.h"
using namespace std;
int main(){
int array[] = {3,1,4,1,5,9,2,6};
int n = sizeof(array)/sizeof(int);
int max = getmax(array,n);
printf("max: =%d\n",max);
return 0;
}
//max.h program
int getmax(int array [],int n);
//max.c propram
#include"max.h"
int getmax(int array [],int n){
int maxnum = array[0];
for(int i=0;i<n;i++){
if(array[i]>maxnum)
maxnum = array[i];
}
return maxnum;
}
Makefile
main: main.c max.o
gcc main.c max.o -o main
max.o
gcc max.c
运行两个包含头文件的程序
//main.c program
#include"stdio.h"
#include"max.h"
#include"min.h"
using namespace std
int main(){
int array[] = {3,1,4,1,5,9,2,6};
int n = sizeof(array)/sizeof(int);
int max = getmax(array,n);
int min = getmin(array,n);
printf("max: =%d\n",max);
printf("min: =%d\n",min);
return 0;
}
//max.h program
int getmax(int array [],int n);
//max.c propram
#include"max.h"
int getmax(int array [],int n){
int maxnum = array[0];
for(int i=0;i<n;i++){
if(array[i]>maxnum)
maxnum = array[i];
}
return maxnum;
}
//min.h program
int getmin(int array [],int n);
//min.c propram
#include"min.h"
int getmin(int array [],int n){
int minnum = array[0];
for(int i=0;i<n;i++){
if(array[i]<minnum)
minnum = array[i];
}
return minnum;
}
Makefile
main: main.c max.o
gcc main.c max.o min.o -o main
max.o:
gcc max.c
min.o:
gcc min.c
运行完程序后删除可执行文件
Makefile
main: main.c max.o min.o
gcc main.c max.o min.o -o main
max.o:
gcc max.c
min.o:
gcc min.c
clean:
rm *.o main
Makefile
CC = gcc
main: main.c max.o min.o
$(cc) main.c max.o min.o -o main
max.o:
$(cc) max.c
min.o:
$(cc) min.c
clean:
rm *.o main
编译多个含有main函数的程序文件
Makefile
cc = gcc
all:hellocpp hello main
hellocpp: hello.cpp
g++ hello.cpp -o hellocpp
hello: hello.c
$(cc) hello.c -o hello
main: main.c max.o min.o
$(cc) main.c max.o min.o -o main
max.o:
$(cc) -c max.c
min.o:
$(cc) -c min.c
clean:
rm *.o hellocpp hello main