zoukankan      html  css  js  c++  java
  • Makefile(二)Makefile中使用变量

    接第一篇,我们可以在makefile中声明变量来替代重复的内容。比如:

    objects = main.o kbd.o command.o display.o \
    insert.o search.o files.o utils.o
    我们就可以很方便地在我们的makefile中以“$(objects)”的方式来使用这个变量了,于是我们的改良版makefile就变成下面这个样子:

    1 objects = main.o kbd.o command.o display.o \
    2 insert.o search.o files.o utils.o
    3 edit : $(objects)
    4 cc -o edit $(objects)

    GNU的make很强大,它可以自动推导文件以及文件依赖关系后面的命令,只要make看到一个[.o]文件,它就会自动的把[.c]文件加在依赖关系中,如果make找到一个whatever.o,那么whatever.c,就会是whatever.o的依赖文件。并且 cc -c whatever.c 也会被推导出来,于是,我们的makefile再也不用写得这么复杂。

     1 objects = main.o kbd.o command.o display.o \
    2 insert.o search.o files.o utils.o
    3 edit : $(objects)
    4 cc -o edit $(objects)
    5 main.o : defs.h
    6 kbd.o : defs.h command.h
    7 command.o : defs.h command.h
    8 display.o : defs.h buffer.h
    9 insert.o : defs.h buffer.h
    10 search.o : defs.h buffer.h
    11 files.o : defs.h buffer.h command.h
    12 utils.o : defs.h
    13 .PHONY : clean
    14 clean :
    15 rm edit $(objects)

    “.PHONY”表示,clean是个伪目标文件,伪目标文件在后续介绍。

    [.o]和[.h]文件的依赖可以写的更简洁:

    1 $(objects) : defs.h//所以的.o文件都依赖defs.h头文件
    2 kbd.o command.o files.o : command.h//这三个.o文件都依赖command.h
    3 display.o insert.o search.o files.o : buffer.h
    4 .PHONY

    补充:

    在有些命令之前会有“$(Q)”出现,“$(Q)”的定义如下:

    1 ifeq ($(KBUILD_VERBOSE),1)
    2 quiet =
    3 Q =
    4 else
    5 quiet=quiet_
    6 Q = @
    7 endif

    其实就是为空或者"@",在指令前加上它,表示执行命令时,不打印这条命令,当然你可以
    "make -s",就是不打印命令,但是这个会将所有的命令都屏蔽掉,想灵活一点就用“@”。

      

      

      

  • 相关阅读:
    python基本数据类型及其使用方法
    爬虫基础
    HTML标签marquee实现滚动效果
    Python学习之路_day_32(基于tcp协议的套接字/粘包问题)
    Python学习之路_day_31(tcp协议/socket)
    Python学习之路_day_30(单例模式,网络编程)
    Python学习之路_day_29(异常处理,元类)
    Python学习之路_day_25(面向对象之封装/多态/组合)
    Python学习之路_day_24(面向对象之继承)
    Python学习之路_day_23(面向对象)
  • 原文地址:https://www.cnblogs.com/leon19870907/p/2150497.html
Copyright © 2011-2022 走看看