zoukankan      html  css  js  c++  java
  • makefile——小试牛刀

    //a.h,包含头文件stdio.h,并且定义一个函数print
    #include<stdio.h>
    void print();
    
    //b.c,包含头文件a.h,然后就可以写print函数的内容了
    #include"a.h"
    void print(){
    printf("who are you
    ");
    }
    
    //c.c,包含头文件a.h,调用print函数
    #include"a.h"
    int main(){
    print();
    return 0;
    }
    

    下面是Makefile 固定命名,记住这些文件全部在同一文件夹下,全部编写完成后,执行make命令就会自动执行Makefile了,

    
    hello:c.o b.o   //其中hello是目标文件,c.o和b.o是依赖文件,需要这两个文件才能生成hello,因为现在还没有c.o文件,所以跳到c.o:c.c a.h那里,然后执行gcc -c c.c 执行完成后又返回该条语句,发现也没有b.o,所以跳到b.o:b.c a.h
        gcc -o hello c.o b.o  //这个是shell命令
    c.o:c.c a.h
        gcc -c c.c    //其中gcc -c c.c是指编译生产c.o(改成gcc -o c.o c.c会报错)
    b.o:b.c a.h
        gcc -c b.c
    clean:      //执行make clean会执行下面的语句
        rm hello c.o b.o

    执行效果如下

    [root@bogon bp]# ls
    a.h  b.c  c.c  Makefile
    [root@bogon bp]# make
    gcc -c c.c 
    gcc -c b.c
    gcc -o hello c.o b.o
    [root@bogon bp]# ls
    a.h  b.c  b.o  c.c  c.o  hello  Makefile
    [root@bogon bp]# ./hello
    who are you
    

    改进后的方法,只需要修改Makefile

    [root@bogon bp]# cat Makefile 
    objects=c.o b.o    相当于C语言的宏定义变量
    hello:c.o b.o
        gcc -o hello $(objects)
    c.o:c.c a.h
        gcc -c c.c 
    b.o:b.c a.h
        gcc -c b.c
    clean:
        rm hello $(objects)
    

    我们还能更精简这个过程,也是只修改Makefile

    [root@bogon bp]# make
    cc    -c -o c.o c.c
    cc    -c -o b.o b.c
    gcc -o hello c.o b.o
    [root@bogon bp]# ls
    a.h  b.c  b.o  c.c  c.o  hello  Makefile
    [root@bogon bp]# ./hello
    who are you
    [root@bogon bp]# cat Makefile 
    objects=c.o b.o
    hello:c.o b.o
        gcc -o hello $(objects)
    $(bojects):a.h  因为c.o和b.o都依赖a.h
    c.o:c.c     可以省略掉gcc
    b.o:b.c
    clean:
        rm hello $(objects)
    [root@bogon bp]# 
    

    上面是我自己总结写的,原文如下http://www.cnblogs.com/sld666666/archive/2010/04/08/1707789.html

    进行内核编译的时候make会多两个选项,-C和-M.

    其中-C $(KDIR) 指明跳转到内核源码目录下读取那里的MakefileM=$(PWD) 表明然后返回到当前目录继续读入、执行当前的Makefile
  • 相关阅读:
    Selenium 中ExpectedConditions 用法说明(最全整理)
    logback的使用和logback.xml详解
    彻底征服 Spring AOP 之 实战篇
    彻底征服 Spring AOP 之 理论篇
    面试
    Java面试
    Python的数据类型与数据结构
    利用Python的 counter内置函数,统计文本中的单词数量
    python爬虫Urllib实战
    python爬虫实战一(基于正则表达式学习)
  • 原文地址:https://www.cnblogs.com/biaopei/p/7730658.html
Copyright © 2011-2022 走看看