Syntax 解释makefile xpi\u builded:=$(build\u dir)/$(install\u rdf)\ $(构建目录)/$(浏览器清单)\ $(chrome\u jar\u文件)\ $(默认值) xpi\u内置\u否\u目录:=$(子项$(内置\u目录)/,,$(xpi\u内置)) $(xpi\U文件):$(生成目录)$(xpi\U生成) @echo“创建XPI文件” cd$(构建目录)$(ZIP)/$(xpi\U文件)$(xpi\U构建\U否\U目录) @echo“创建XPI文件。完成!” $(构建目录)/%:% cp-f$

Syntax 解释makefile xpi\u builded:=$(build\u dir)/$(install\u rdf)\ $(构建目录)/$(浏览器清单)\ $(chrome\u jar\u文件)\ $(默认值) xpi\u内置\u否\u目录:=$(子项$(内置\u目录)/,,$(xpi\u内置)) $(xpi\U文件):$(生成目录)$(xpi\U生成) @echo“创建XPI文件” cd$(构建目录)$(ZIP)/$(xpi\U文件)$(xpi\U构建\U否\U目录) @echo“创建XPI文件。完成!” $(构建目录)/%:% cp-f$,syntax,makefile,Syntax,Makefile,谁能给我解释一下这个makefile部分吗?特别感兴趣 $(build\u dir)/%:%以及$请参见GNU make文档中的和。第一条规则匹配$(build\u dir)中的文件,而不是$(build\u dir)本身$ 下一条规则 $(build_dir)/foo: foo cp -f foo $(build_dir)/foo 用于$(build_dir)本身,并且不必要地复杂。它说“如果$(build\u dir)不存在,那么mkdir就会存在”,可以这样写: $(build

谁能给我解释一下这个makefile部分吗?特别感兴趣

  • $(build\u dir)/%:%
    以及
    $请参见GNU make文档中的和。第一条规则匹配
    $(build\u dir)
    中的文件,而不是
    $(build\u dir)
    本身<代码>$ 下一条规则

    $(build_dir)/foo: foo
        cp -f foo $(build_dir)/foo
    
    用于
    $(build_dir)
    本身,并且不必要地复杂。它说“如果
    $(build\u dir)
    不存在,那么mkdir就会存在”,可以这样写:

    $(build_dir):
        @if [ ! -x $(build_dir) ]; \
      then \
      mkdir $(build_dir); \
      fi
    
    看起来您的主要目标是
    $(xpi\u文件)


    因此Make将首先生成
    $(build\u dir)
    (如果需要),然后是列表的成员
    %(xpi\u builded)
    ,其中包括两种形式的内容
    $(build\u dir)/%
    。完成这些操作后,它将执行此规则的命令:它将cd放入
    $(build\u dir)
    ,压缩一些内容,并
    回显几条消息。

    不太正确--
    $@谢谢您的详细解释。你知道有什么好的电子书吗?@Michael e-book?LukášLalinský引用了GNUMake手册,这是我所知道的最好的文档。还有“高级自动依赖生成”,这是高级的,还有“递归使被认为是有害的”,我不同意这一说法。
    
    $(build_dir)/foo: foo
        cp -f foo $(build_dir)/foo
    
    $(build_dir):
        @if [ ! -x $(build_dir) ]; \
      then \
      mkdir $(build_dir); \
      fi
    
    $(build_dir):
        mkdir $@
    
    $(xpi_file): $(build_dir) $(xpi_built)