0%

Makefile

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