make

名称:管理一组程序的项目管理工具。

总揽:make [-f makefile] [options] ... [targets]...

描述:

    make的目标是决定一个大的项目中哪个部分需要自动的被重新编译,并且使用定义的

命令对他们进行重编译。实际上make不仅仅可以用来管理程序项目,你也可以使用make来管理

任何你想要做的事。

    为了使用make程序比必须书写一个称为makefile的文件,该文件描述了目标,目标的

依赖文件及自动更新目标的命令。在一个程序中,通常最后生成的可执行文件都是更新自目标

文件,而目标文件又是由源文件生成的。

    一旦存在一个合适的makefile文件,每次你改变项目中的某些源文件时,只需要简单

的执行make命令就可以自动更新需要更新的文件了。

    make是根据makefile的数据和项目文件中最后的修改时间来判断项目中哪个文件需要

被更新。只有那些最后修改时间新于makefile的项目文件才需要自动被更新。

    make执行makefile中指定的命令来更新一个或多个目标。(这里的目标通常为一个程序).

若你在执行make是没有指定选项-f的话,则make会按GNUmakefile,makefile,Makefile的顺序在

当前目录中搜索makefile文件,若这些文件都不存在则出错不执行。当然你可以通过在命令行中

用-f选项来指定makefile。

    通常你会把你的makefile命名为makefile或Makefile(推荐使用Makefile,因为它会在使用

ls等列出目录内容的命令时出现的位置比较靠前).不推荐使用GNUmakefile,因为除了GNU版本的make

外其他版本的make不能自动识别该文件。

选项:

    -b,-m:  这些选项只是为了兼容其他版本的make,GNU版本的make忽略他们。

    -B,--always-make:无条件更新所有makefile中的目标。

    -C dir,--directory=dir:进入指定的目录dir后执行make命令。若指定多个该选项的话

    则后面的-C选项指定的目录是相对于前面的目录的.如-C / -C etc 等价 -C /etc

    -d:额外打印调试信息。

    -e,--environment-overrides:使用环境变量覆盖makefile中指定的变量。默认情况下,若

    makefile中设置的变量与环境变量同名的话使用的是makefile中设置的变量的。

    +-f file,--file=file,--makefile=file:使用指定的file作为makefile

    -i,--ignore-errors:在执行makefile中指定的命令时忽略错误。

    -I dir,--include-dir=dir:在指定的目录dir中搜索makefile。若指定多个该选项的话则按

    指定的顺序一次搜索目录。不像make的其他选项,该选项允许这样指定 -Idir.

    -j [jobs],--jobs[=jobs]:指定一次运行的命令个数。该选项可以有效的提高make执行的效率

    如:make -j 2  表示一次执行两个命令

    -k,--keep-going:若发生错误也继续执行下去。

    -n,--just-print,--dry-run,--recon:不实际执行makefile中的命令二只是打印他们,该选项

    可用于检查是否正确书写了makefile中的命令

    -o file,--old-file=file,--assume-old=file:不重建指定的文件

    -S,--no-keep-going:取消-k选项的作用。

实例:

    编写一个简单的项目包含文件:hello.h hello.c main.c  makefile
    
    hello.h的内容:

        int printhello();

    hello.c的内容:

        #include<stdio.h>
        int printhello(){
            printf("Hello World\n");
            return 0;
        }

    main.c的内容:

        #include "hello.h"
        int main(void){
            printhello();
            return 0;
        }
   
    makefile的内容:

    PRE=hello.h hello.c main.c
    hello:$(PRE)
        gcc -o hello $(PRE)

    .PHONY:tarsrc
    tarsrc:
        tar zcvf hello.tar.gz $(PRE)

    执行编译:  make

    打包源码:  make tarsrc

make的命令是个非常好的项目管理软件,要进一步学习的话可以看看下面这个网页
http://www.linuxsir.org/main/doc/gnumake/GNUmake_v3.80-zh_CN_html/index.html