• Linux makefile讲解


      博客不会讲解的太细致深入,推荐先看视频再看博客

      视频链接,推荐去B站观看,B站比较清晰...

      土豆网:http://www.tudou.com/programs/view/19VZ0f3b_I0

      B站:  http://www.bilibili.com/video/av9655080/

      在linux中编译.c文件的时候,可以用gcc命令,当然了,如果是100个.c文件你怎么办?这个时候你最好创建一套规则来使用,这时我们就用到了makefile,一切东西的发明创造都是为了方便。

      现在我有一个.c文件叫test.c,内容如下:

    #include <stdio.h>
    void main()
    {
        printf("hello wold! 
    ");          
    }

      然后嘞,我用makefile来搞定它!(注意这是在同一个目录下的哦)

    test:test.o                              //目标:依赖关系
        gcc test.o -o test                   //注意!这里的是tab键,不是空格,不打tab键会出错的
    test.o:test.c
        gcc -c test.c -o test.o        
    clean:
        rm *.o test
        

      这就是一个最简单的makefile啦,执行的时候只需要make一下就ok了 (如果你看不懂就去看我的视频,我会讲解为什么要这么写)

      看过上面的例子之后可能有人会说makefile的优越性在哪?别急,下面我们来6个.c文件,分别是 m.c m.h visit.c play.c listen.c watch.c study.c

      m.c

    #include <stdio.h>
    void main()
    {
        int i;
        printf("please input the value of i from 1 to 5 :
    ");
        scanf("%d",&i);
        if(i==1)
          visit();
        else if(i==2)
          study();
        else if(i==3)
          play();
        else if(i==4)
          watch();
        else if(i==5)
          listen();
        else
          printf("nothing to do 
    ");
        printf("This is a woderful day
    ");      
                
    }

      study.c

    #include <stdio.h>
    void main()
    {
        void study()
        {  
            printf("study embedded system today 
    "); 
        }      
    }

      listen.c

    #include <stdio.h>
    void main()
    {
        void listen()
        {  
            printf("listen english today 
    "); 
        }      
    }

      play.c

    #include <stdio.h>
    void main()
    {
        void study()
        {  
            printf("play football today 
    "); 
        }      
    }

      visit.c

    #include <stdio.h>
    void main()
    {
        void study()
        {  
            printf("visit friend today 
    "); 
        }      
    }

      watch.c

    #include <stdio.h>
    void main()
    {
        void watch()
        {  
            printf("watch TV today 
    "); 
        }      
    }

      我是不是写了一个m.h文件?这个叫头文件,也叫引用文件,因为m.c里面用了visit(),play()...方法,所以我们也来写一下m.h

    void visit();
    void listen();
    void watch();
    void study();
    void play();

      这里列举了6个.c文件和一个.h文件,现在我们来写makefile

    CC=gcc
    TARGET=ALL
    OBJECTS=m.o visit.o listen.o watch.o study.o play.o
    $(TARGET):$(OBJECTS) 
        $(CC) $(OBJECTS) -o m
    m.o:m.c m.h                                      //这里m.o和m.h一起
        $(CC) -c m.c -o m.o
    visit.o:visit.c
        $(CC) -c visit.c -o visit.o
    listen.o:listen.c
        $(CC) -c listen.c -o listen.o
    watch.o:watch.c
        $(CC) -c watch.c -o watch.o
    study.o:study.c
        $(CC) -c study.c -o study.o
    play.o:play.c
        $(CC) -c play.c -o play.o
    clean:
        rm *.o m

      这个应该很好懂的,最后嘞,我介绍一下怎么使用变量来简化操作

    CC=gcc
    TARGET=ALL
    OBJECTS=m.o visit.o listen.o watch.o study.o play.o
    $(TARGET):$(OBJECTS) 
        $(CC) $(OBJECTS) -o m
    m.o:m.c m.h                                     
        $(CC) -c m.c -o m.o
    *.o:*.c                                          // *可以代替目标名称,因为依赖和目标名一样,所以都可以用*来代替
        $(CC) -c $< -o $@                             // $<的意思是依赖,$@的意思是目标
    clean:
        rm *.o

      

      makefile呢分为在同一个文件下面和不同一个文件下面,我只讲了在同一个文件下面,那个大家自己去查也很简单,就酱~

  • 相关阅读:
    通过IMM With Remote Console为服务器安装操作系统
    linux下编译安装php5.6出现 configure: error: Cannot find MySQL header files under /usr/local/mysql.
    5700交换机清除配置
    嵌入式驱动解析:从串口驱动到Linux驱动模型
    Win10自带Ubuntu子系统的安装与配置
    关于嵌入式C代码优化的几种方法
    2020软考高级系统分析师,你想知道的全在这
    libpng warning: iCCP: known incorrect sRGB profile
    pycharm中导入pygame库失败及解决办法
    pycharm中导入pygame等第三方库
  • 原文地址:https://www.cnblogs.com/yunquan/p/6671122.html
Copyright © 2020-2023  润新知