• GNU make manual 翻译( 一百二十五)


    继续翻译

       Here is the pattern rule to generate a file of prerequisites (i.e.,
    a makefile) called `NAME.d' from a C source file called `NAME.c':
    
         %.d: %.c
                 @set -e; rm -f $@; \
                  $(CC) -M $(CPPFLAGS) $< > $@.$$$$; \
                  sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
                  rm -f $@.$$$$
    
    *Note Pattern Rules::, for information on defining pattern rules.  The
    `-e' flag to the shell causes it to exit immediately if the `$(CC)'
    command (or any other command) fails (exits with a nonzero status).  
    
       With the GNU C compiler, you may wish to use the `-MM' flag instead
    of `-M'.  This omits prerequisites on system header files.  *Note
    Options Controlling the Preprocessor: (gcc.info)Preprocessor Options,
    for details.
    
       The purpose of the `sed' command is to translate (for example):
    
         main.o : main.c defs.h
    
    into:
    
         main.o main.d : main.c defs.h
    
    This makes each `.d' file depend on all the source and header files
    that the corresponding `.o' file depends on.  `make' then knows it must
    regenerate the prerequisites whenever any of the source or header files
    changes.

    下面是一个模式规则,用来生成一个前提条件文件(例如一个 makefile) ,此文件名为 NAME.d ,是从名为 NAME.c 的源文件而来:

    %.d: %.c
    @set -e; rm -f $@; \
    $(CC) -M $(CPPFLAGS) $< > $@.$$$$; \
    sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
    rm -f $@.$$$$

    关于 定义 模式规则,参见 *Note Pattern Rules::。

    -e 标志是的如果 $(CC) (或其他指令)一旦失败(以非0值退出),shell 立即退出。 

    对GNU C 编译器而言,你可期望用 -MM 标志来代替 -M 标志,这省略了系统头文件部分的前提条件。 细节参见 *Note Options Controlling the Preprocessor: (gcc.info) Preprocessor Options.

    The purpose of the `sed' command is to translate (for example):

    sed 命令的目的是翻译(例如):

    把 main.o : main.c defs.h

    翻译成:

    main.o main.d : main.c defs.h

    这使得 每个 .d 文件依赖于所有的.o 文件依赖的 源文件和头文件。make 这样就会知道,当源文件或者头文件变化时,它必须重新生成前提条件。

    后文待续

  • 相关阅读:
    解析HTTP协议六种请求方法
    金蝶
    普元
    中间件
    [CTSC2008] 网络管理
    【Uva 10498】满意值
    【SPOJ839】最优标号
    bzoj2879 [Noi2012]美食节
    bzoj3144 [Hnoi2013]切糕
    bzoj3112 [Zjoi2013]防守战线
  • 原文地址:https://www.cnblogs.com/gaojian/p/2704262.html
Copyright © 2020-2023  润新知