Как использовать make для синхронизации файла? - PullRequest
0 голосов
/ 28 апреля 2019

При выполнении:

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/

Make продолжает запускать правило "${GITIGNORE_DESTINE_PATH}" каждый раз, когда я вызываю make, но оно должно вызываться только при изменении исходного файла ../.gitignore.

Обновление 3

Это файл 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.

1 Ответ

0 голосов
/ 06 мая 2019

Решение состоит в том, чтобы удалить двойные кавычки из целевых правил.Если у них есть пробел в имени, 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/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...