zoukankan      html  css  js  c++  java
  • 2.makefile 结构

    • makefile 的意义

      • makefile 用于定义源文件间的依赖关系
      • makefile 说明如何编译各个源文件并生成可执行文件
    • 依赖的定义

      targets:prerequisites;command1
      '	' command2
      
    • makefile 中的元素含义

      • targets

        • 通常是需要生成的目标文件名
        • make 所需执行的命令名称
      • prerequisities

        • 当前目标所依赖的其它目标或文件
      • command

        • 完成目标所需要执行的命令
    • 注意事项

      • targets 可以包含多个目标

        • 使用空格对多个目标名进行分隔
      • prerequisites 可以包含多个依赖

        • 使用空格对多个依赖进行分隔
      • [Tab] 键:

        • 每一个命令行必须以 [Tab] 字符开始
        • [Tab] 字符告诉 make 此行是一个命令行
      • 续行符:

        • 可以将内容分开写到下一行,提高可读性
      • makefile 中可以在命令前加上 @ ,使得命令无回显

    • 依赖示例

      all:test
      	echo "make all"
      test:
      	echo "make test"
      
    • 依赖规则

      • 当目标对应的文件不存在,执行对应命令
      • 当依赖在时间上比目标更新,执行对应命令
      • 当依赖关系连续发生时,对比依赖链上的每一个目标
    • 示例:利用 main.c 和 func.c 源文件生成 hello.out 可执行文件

      • 源代码文件

        //func.c
        #include <stdio.h>
        void foo(){
            printf("print void foo()");
        }
        
        //main.c
        #include <stdio.h>
        extern void foo();
        
        int main()
        {
            foo();
            return 0;
        }
        
      • makefile 文件

        hello.out:main.o func.o
        	gcc -o hello.out main.o func.o
        main.o:main.c
        	gcc -o main.o -c main.c
        func.o:func.c
        	gcc -o func.o -c func.c
        
      • 执行 make,输出:

        gcc -o func.o -c func.c
        gcc -o main.o -c main.c
        gcc -o hello.out func.o main.o
        
      • 修改 func.c 文件 => 当依赖在时间上比目标更新,执行对应命令

        //func.c
        #include <stdio.h>
        void foo(){
            printf("print void foo()
        ");
        }
        
        • 再次执行 make,输出:

          gcc -o func.o -c func.c
          gcc -o hello.out func.o main.o
          
  • 相关阅读:
    hbase Compaction
    hadoop集群 动态添加或删除节点
    Hadoop节点迁移
    Spark程序运行常见错误解决方法以及优化
    用python执行sql来验证数据是否准时导入了目标库
    kylin2.3版本启用jdbc数据源(可以直接通过sql生成hive表,省去手动导数据到hive,并建hive表的麻烦)
    phoenix 二级索引使用实践
    jenkins任务失败,发送邮件通知
    Coolite学习
    MySql连接和授权命令
  • 原文地址:https://www.cnblogs.com/bky-hbq/p/13197748.html
Copyright © 2011-2022 走看看