• 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
          
  • 相关阅读:
    FlexBuilder2组件学习之Tree组件
    ASP.Net数据验证中的验证组
    私のスピーチ
    ASP调用ORACLE的存储过程
    将Excel数据导入到Sql Server "当IDENTITY_INSERT设置为OFF时" 的解决
    Android中如何使用命令行查看内嵌数据库SQLite3
    20110406新工作的开始
    (转)如何在Eclipse中查看JDK类库的源代码
    Sql Server存储过程中加入Try Catch,并向客户端返回友好信息
    解决 Access 磁盘空间或内存不足一例
  • 原文地址:https://www.cnblogs.com/bky-hbq/p/13197748.html
Copyright © 2020-2023  润新知