zoukankan      html  css  js  c++  java
  • makefile使用笔记(一)入门

    By francis_hao    Mar 2,2017

    makefile

    makefile一个很简单的例子如下,该实例完成在执行make时,将main.c编译成可执行文件main的功能。

    各项的含义:

    main

    目标

    main.c

    目标的依赖文件

    :

    目标与依赖的分隔符

    gcc -o main main.c

    命令(一般是shell命令),必须以TAB开头

     

    make工作过程

    在默认的情况下,输入make命令时,

    1. make在当前目录下按顺序读取GNUmakefile、makefile和Makefile。
    2. 若找到文件则再读取第一个目标,并只将此目标当作最终目标。
    3. 查看其后的依赖,若依赖存在且未改动过则退出,若依赖不存在则查看之后的目标是否含有此依赖,层层嵌套。依赖若均存在,执行之后的命令。

    当然,可以在make之后指定目标,那么make则会直接去读取该指定的目标,下图展示该过程:

    此例的makefile中有两个目标:first和second。

    只执行make时,make只读取第一个目标first,此目标生成后,其后的目标second不会被处理,但是在make后指定目标second,则会只生成此目标。

     

    伪目标

    如果,想要删除上面的makefile生成的目标文件first和second。该怎么办呢?

    答案是写一个不需要依赖的目标(比如clean),只用它执行删除命令。

    看似很完美的解决了,但是如果很不巧当前文件夹下也有一个和此目标同名的文件(clean),那么这个目标就总是最新的(因为后面没有依赖),每次都不会执行。如下所示

    解决的办法就是告诉make这个目标是个伪目标,需要每次都执行。告诉make的方法就是用.PHONY标志此目标,如下

    .PHONY的位置无关紧要,放在最下面也是可以的。

     

    注释

    makefile里只有行注释,以#开头的行是注释行。若要使用#,可以使用转义字符#。

     

    结语

    makefile的东西其实就这么多,因此这篇文档也就结束了。

     

     


    本文由 刘英皓 创作,采用 知识共享 署名-非商业性使用-相同方式共享 3.0 中国大陆 许可协议进行许可。欢迎转载,请注明出处:
    转载自:http://www.cnblogs.com/yinghao1991/p/6493018.html

     

    参考

    【1】 跟我一起写Makefile 陈皓 http://blog.csdn.net/haoel/article/details/2886/

  • 相关阅读:
    洛谷 题解 P5595 【【XR-4】歌唱比赛】
    洛谷 题解 CF1151D 【Stas and the Queue at the Buffet】
    洛谷 题解 CF299A 【Ksusha and Array】
    仙人掌找环
    2-SAT
    带花树
    帮我背单词
    csp2019退役祭
    P5284 [十二省联考2019]字符串问题 题解
    【网络流24题】魔术球问题
  • 原文地址:https://www.cnblogs.com/yinghao-liu/p/6493018.html
Copyright © 2011-2022 走看看