zoukankan      html  css  js  c++  java
  • makefile

    阮一峰的makefile教程对新人挺友好的。

    ==============================

    target ... : prerequisites ...
    command
    ...
    ...

    target通常是一个目标文件,也可以是一个操作(伪目标)。
    prerequisites就是,要生成那个target所需要的。
    command也就是make需要执行的命令。(任意的Shell命令)
    这是一个文件的依赖关系,即target这一个或多个的目标文件依赖于prerequisites中的文件,其生成规则定义在command中。

    如果target不存在,或者prerequisites中如果有文件比target文件要新的话,command所定义的命令就会被执行。
    而如果prerequisites中有文件不存在,则递归去执行生成该文件的命令。
    这就是Makefile的规则。也就是Makefile中最核心的内容。

    具体使用时,无参数的make会使用第一个目标指令;make xxxx会使用xxxx指令,如果目录中已经存在xxxx,则不执行。
    如果target是一个操作(伪目标),而目录中有名为target的文件,按上述规则,则该target不会执行。
    为了避免这种情况,可以用“.PHONY”明确声明为伪目标。

    隐含规则

     编译C/C++时,<n>.o 的目标会自动推导为 <n>.c / <n>.cpp

    # Makefile 中
    main : main.o
        gcc -o main main.o
    
    #会自动变为:
    main : main.o
        gcc -o main main.o
    
    main.o: main.c    <-- main.o 这个目标是隐含生成的
        gcc -c main.c

    更多隐含规则请戳这个链接

  • 相关阅读:
    Dockerfile
    走进Docker
    liunx 设置定时任务
    《程序员自我修养》读书笔记
    Ubuntu换源
    liunx安装python2.7.12
    预习非数值数据的编码方式
    预习原码补码
    第三章预习
    预习非数值数据的编码方式
  • 原文地址:https://www.cnblogs.com/dirge/p/9090309.html
Copyright © 2011-2022 走看看