zoukankan      html  css  js  c++  java
  • make文件基础用法

    参照:https://www.jianshu.com/p/0b2a7cb9a469

    创建工作目录,包含一下文件

    • main.c
    • person.c
    • b.h
    • c.h
    /***
    c.h
    ***/
    //this is c.h
    /***
    b.h
    ***/
    //this is b.h
    /***
    main.c
    ***/
    #include<stdio.h>
    //#include"a1.h"
    //#include"b.h"
    
    int main()
    {
        printf("The Version 1.1
    ");
        return 0;
    }

    如果main.c文件中加上注释的头文件会生成对应的b.h.gch文件,此处存疑

    1.创建makefile文件:

    /***
    makefile
    ***/
    app: main.o person.o other.o
        gcc -o app main.o person.o other.o
    main.o:main.c
        gcc -c main.c a.h
    person.o:person.c a.h b.h
        gcc -c person.c
    other.o:person.c b.h
        gcc -c person.c -o other.o
    
    clean:
        rm app main.o person.o other.o

    2.定义变量,代替目标文件,简化代码:

    objects = main.o person.o other.o
    app : $(objects)
        gcc -o app $(objects)
    main.o : main.c
        gcc -c main.c c.h
    person.o : person.c c.h b.h
        gcc -c person.c
    other.o : person.c b.h
        gcc -c person.c  -o other.o
    
    clean :
        rm app $(objects)

    3.使用makefile自动推导机制,简化指令语句

           在编译过程中,哪些类型的文件的编译需要哪些指令是固定的,所以makefile文件可以从依赖关系自动推导出后面要执行的语句

    简化如下:

    objects = main.o person.o
    
    app : $(objects)
        gcc -o app $(objects)
    
    main.o : main.c
    person.o : person.c c.h b.h
    
    clean :
        rm app $(objects)

    只有依赖声明下面没有任何语句,makefile才会自动推导,否则执行指定文件。

    注意:这里去掉了other.o,是因为other.o依赖person.c手动生成的other.o,这里的makefile只会生成与依赖文件相同名字的.o文件。

    4.如果文件不在一个目录下,需要指定目录,只需要在makefile的第一行添加

    VPATH = path1 : path2 :path3

    makefile文件会自动按照路径顺序,依次查找文件

    如图:

    person.c文件在  /home/exbot/wangqinghe/makefileTest

    b.h文件在/home/exbot/wangqinghe

    c.h 文件在当前目录中2019060601 文件夹下

    于是makefile 如下:

    VPATH = ./2019060601 :/home/exbot/wangqinghe : /home/exbot/wangqinghe/makefileTest
    
    CC = gcc
    
    objects = main.o person.o
    
    app : $(objects)
            $(CC) -o app $(objects)
            @echo "input information : compile finished"
            #@echo "输出信息:编译完成"
    
    main.o : main.c
    
    person.o : person.c c.h b.h
    
    .PHONY : clean
    
    clean :     
            rm app $(objects)
  • 相关阅读:
    HTTP协议中几个状态码
    Memcache 使用方法
    mysql 时间设置
    Adobe After Effect CS6 下载 安装 破解 汉化
    skycons.js 基于canvas的天气动态图标小插件
    Adobe Creative Cloud Cleaner Tool 清除工具
    nodejs常用命令行
    js过滤特殊字符
    QuickTime 介绍 下载 安装(win7及以上版本)
    js 16进制转10进制
  • 原文地址:https://www.cnblogs.com/wanghao-boke/p/10986723.html
Copyright © 2011-2022 走看看