• 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
  • 相关阅读:
    Java系列教程-Spring 教程目录
    python中如何给散点图上面的特定点做标记
    OpenCV:Python下OpenCV安装和入门最强详细攻略
    如何实现一个 windows 桌面动态壁纸
    学习C/C++的简单方法
    手眼标定
    python合并多个txt文件
    python qq发消息
    python获取当前天气情况
    程序代写、毕业设计
  • 原文地址:https://www.cnblogs.com/biaopei/p/7730658.html
Copyright © 2020-2023  润新知