其他

how-to-makefile(入门篇)?

how-to-makefile(入门篇)?

本文参考

单个c文件

#include<stdio.h>
int main()
{
    printf("hello world\n");
    return 0;
}

makefile 文件

hello: hello.c
    gcc hello.c -o hello

两个c文件

#filename: makefile
getMax: max.o main.c
    gcc max.o main.c -o getMax

max.o: max.c
    gcc -c max.c

clean:
    rm *.o
    rm getMax
//filename: max.h
#include<stdio.h>
int getMax(int *array);
//filename: max.c
#include "max.h"
int getMax(int *array)
{
    int i, max = array[0];
    for ( i = 1; i < 5; i++) 
    {
        if(array[i] > max)
        {
            max = array[i];
        }
    }
    return max;
}
//filemame: main.c
#include "max.h"
int main()
{
    int array[] = {1, 3, 5, 7, 9};
    printf("max = %d\n", getMax(array));
}

多个c文件

#filename: makefile

main: max.o min.o main.c
    gcc max.o min.o main.c -o main

max.o:
    gcc -c max.c

min.o:
    gcc -c min.c

clean:
    rm *.o
    rm main 
//filename: tool.h
#include<stdio.h>
int getMax(int *array);
int getMin(int *array);
//filename: max.c
#include "tool.h"
int getMax(int *array)
{
        int i, max = array[0];
        for ( i = 1; i < 5; i++)
        {
                if(array[i] > max)
                {
                        max = array[i];
                }
        }
        return max;
}
//filename: min.c
#include "tool.h"
int getMin(int *array)
{
        int i, min = array[0];
        for ( i = 1; i < 5; i++)
        {
                if(array[i] < min)
                {
                        min = array[i];
                }
        }
        return min;
}
//filename: main.c
#include "tool.h"
int main()
{
    int array[] = {1, 3, 5, 7, 9};
    printf("max = %d\n", getMax(array));
    printf("min = %d\n", getMin(array));
}

生成多个可执行程序

第一行加上all即可

#filename: makefile
all: getMax getMin

getMax: max.o main_max.c
    gcc max.o main_max.c -o getMax

getMin: min.o main_min.c
    gcc min.o main_min.c -o getMin

max.o: max.c
    gcc -c max.c

min.o: min.c
    gcc -c min.c

clean:
    rm *.o
    rm getMax
    rm getMin
//filename: tool.h
#include<stdio.h>
int getMax(int *array);
int getMin(int *array);
//filename: max.c
#include "tool.h"
int getMax(int *array)
{
        int i, max = array[0];
        for ( i = 1; i < 5; i++)
        {
                if(array[i] > max)
                {
                        max = array[i];
                }
        }
        return max;
}
//filename: min.c
#include "tool.h"
int getMin(int *array)
{
        int i, min = array[0];
        for ( i = 1; i < 5; i++)
        {
                if(array[i] < min)
                {
                        min = array[i];
                }
        }
        return min;
}
//filename: main_max.c
#include "tool.h"
int main()
{   
    int array[] = {1, 3, 5, 7, 9};
    printf("max = %d\n", getMax(array));
}
//filename: main_min.c
#include "tool.h"
int main()
{
    int array[] = {1, 3, 5, 7, 9};
    printf("min = %d\n", getMin(array));
}

总结:

makefile的写法

先写生成的可执行程序

后面跟依赖文件

下面再接着写依赖文件

直到全部写完

以两个c文件举例

makefile中其他的都是装饰而已

将两个c文件的那个makefile包装一下

CC = gcc

#目标程序
TARGET = getMax

#所有c文件
SRCS = $(wildcard *.c)

#把c文件名替换成.o文件
OBJS = $(patsubst %c, %o, $(SRCS))
#/防止目录中有这些文件,造成冲突
.PHONY: all clean

#主体
all: $(TARGET)
$(TARGET): $(OBJS)
        $(CC) $(OBJS) -o $(TARGET)

$(OBJS):
        $(CC) -c $(SRCS)

clean:
        rm -f $(OBJS) $(TARGET)

就完美了

docker使用案例:创建容器并使用ssh登录

上一篇

ubuntu下录制屏幕并剪辑视频,测试博客中添加视频

下一篇

你也可能喜欢

发表评论

您的电子邮件地址不会被公开。 必填项已用 * 标注

提示:点击验证后方可评论!

插入图片

个人微信公众号

we-tuiguang

qq交流群

群号:1046260719

微信扫一扫

微信扫一扫