Makefile学习总结之执行Make

执行Make

  1. 最简单的方法:使用不带任何参数的“make”命令来重新编译所有过时的文件。

  2. make的退出状态有三种
    0——状态为0,执行成功;
    2——执行过程出现错误,同时会提示错误信息;
    1——在执行make时使用了“-q”参数,而且当前工程中粗壮乃过时的目标文件

  3. 部分标准的伪目标和空目标命令
    all——作为Makefile的顶层目标,一般此目标作为默认的终极目标;
    clean——这个伪目标定义了一组命令,这些命令的功能时删除所有由make创建的文件;
    mostlyclean——和“clean”伪目标功能相似。区别在于它所定义的删除命令不会全部删除由make生成的文件。比如不需要删除某些库文件。
    install——将make成功创建的可执行文件拷贝到shell环境变量“Path”指定的某个目录。典型的,应用可执行文件被拷贝到目录“/usr/local/bin,库文件拷贝到目录“/usr/local/lib”目录下;
    print——打印出所有被更改的源文件列表
    tar——创建一个tar文件;
    shar——创建一个源代码的shell文档;
    dist——为源文件创建发布的压缩包,可以使各种压缩方式的发布包。
    TAGS——创建当前目录下所有源文件的符号信息(“tags”)文件,这个文件可被vim使用;
    check/test——对Makefile最后生成的文件进行检查;

  4. 书写Makefile的目的就是为了告诉make一个目标是否过期,以及如果重建一个过期的目标。

  5. 防止特定文件重建,有时候当修改了工程中的某一个文件后,并不希望重建那些依赖于这个文件的目标。在执行make时,因为头文件的改变会导致所有包含它的源文件被重新编译,当然终极目标也会被重建。为了避免重新编译整个工程,我们按照下边的过程来处理:
    a) 第一种:

  6. 使用“make”命令对所有需要更新的目标进行重建。保证修改某个文件之前所有的目标已经是最新的。

  7. 编辑需要修改的那个源文件(修改的头文件的内容不能对之前的编译的程序有影响,比如:更改了头文件中的宏定义。这样会造成已经存在的程序和实现不相符!这里所说的修改指:不改变已经存在的任何东西,除非你有特殊的要求)。

  8. 使用“make -t”命令来改变已存在的所有的目标文件的时间戳,将其最后修改时间修改到当前时间。
    第一种的现实基于的前提:需要对未更改头文件之前的编译程序进行保存。更多的情况是:修改这个头文件之前已经修改了很多源文件或者其它的头文件。并且也没有执行make。
    b) 第二种:

  9. 执行编译,使用“make -o HEADERFILE”,“HEADERFILE”为需要忽略更改的头文件,防止那些依赖这个头文件的目标被重建,忽略多个头文件的修改可使用多个“-o HEADERFILE”。这样,头文件“HEADERFILE”的修改就不会触发依赖它的目标被重建。“-o”参数的这种使用方式仅限于头文件(.h),不能使用“-o”来指定源文件。

  10. 执行make -t;

发布了39 篇原创文章 · 获赞 13 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_43443900/article/details/103373017