代码之家  ›  专栏  ›  技术社区  ›  Evandro Coan

如何使用make保持文件同步?

  •  0
  • Evandro Coan  · 技术社区  · 7 年前

    ECHOCMD:=/bin/echo -e
    SHELL := /bin/bash
    
    GITIGNORE_SOURCE_PATH := ../.gitignore
    GITIGNORE_DESTINE_PATH := ./setup/.gitignore
    
    start_syncing: "${GITIGNORE_DESTINE_PATH}"
        printf '\n'
    
    "${GITIGNORE_DESTINE_PATH}":
        cp -vr "${GITIGNORE_SOURCE_PATH}" ./setup/
    

    "${GITIGNORE_DESTINE_PATH}" 每次我打电话的时候 make ,但它应该只在源文件 ../.gitignore 已修改。

    这是建议我在评论中使用的make文件:

    ECHOCMD:=/bin/echo -e
    SHELL := /bin/bash
    
    GITIGNORE_SOURCE_PATH := ../.gitignore
    GITIGNORE_DESTINE_PATH := ./setup/.gitignore
    
    start_syncing: "${GITIGNORE_DESTINE_PATH}"
        printf '\n'
    
    ${GITIGNORE_DESTINE_PATH}: ${GITIGNORE_SOURCE_PATH}
        cp -vr "${GITIGNORE_SOURCE_PATH}" ./setup/
    

    运行它,它说:

    $ ls -l ../.gitignore
    -rwx---r-x+ 1 User None 488 Apr 27 23:23 ../.gitignore
    $ ls -l ./setup/.gitignore
    -rwx---r-x+ 1 User None 488 Apr 28 07:41 ./setup/.gitignore
    $ make
    make: *** No rule to make target '"./setup/.gitignore"', needed by 'start_syncing'.  Stop.
    
    0 回复  |  直到 7 年前
        1
  •  0
  •   Evandro Coan    7 年前

    解决方案是从目标规则中删除双引号。如果名称上有空格,make除了手动转义空格的值外,别无选择 \

    ECHOCMD:=/bin/echo -e
    SHELL := /bin/bash
    
    GITIGNORE_SOURCE_PATH := ../.gitignore
    GITIGNORE_DESTINE_PATH := ./setup/.gitignore
    
    start_syncing: ${GITIGNORE_DESTINE_PATH}
        printf '\n'
    
    ${GITIGNORE_DESTINE_PATH}: ${GITIGNORE_SOURCE_PATH}
        cp -vr "${GITIGNORE_SOURCE_PATH}" ./setup/