Makefile - нет такого файла или ошибки каталога

Use la ruta absoluta en lugar de la ruta relativa, luego funcionará.

Ej.:

ln -s /home/user/test/src /home/user/test/firefox
2
28.05.2019, 17:34
3 ответа

Существует ряд проблем с вашим Makefile (, помимо вопроса о том, является ли Makefile подходящим решением):

  • условные директивы не являются частью рецепта, поэтому они не должны начинаться с табуляции;
  • условные директивы оцениваются при чтении Makefile, поэтому переменные должны быть назначены заранее и не могут быть -специфичными для цели;
  • docker ps -aвозвращает информацию обо всех известных контейнерах, включая незапущенные -контейнеры;
  • Фальшивые цели должны быть объявлены как таковые.

Следующие работы:

result = $(shell docker ps -f name=myapp -q | wc -l)
start_docker_myapp:
ifeq ($(strip $(result)),1)
    @echo true
else
    @echo false
endif

.PHONY: start_docker_myapp
4
27.01.2020, 21:55

Чтобы установить значение переменной внутри цели, вы должны использовать синтаксис eval:

start_docker_myapp:
    $(eval result = $(shell (docker ps -a | grep myapp ) | wc -l ))
    @echo "result is " result
    endif

Кроме того, вы можете оценить эту переменную вне правила:

result = $(shell (docker ps -a | grep myapp ) | wc -l )

start_docker_myapp:        
    @echo "result is " result
    endif
1
27.01.2020, 21:55

Вместо того, чтобы реализовывать сочетание кода сценария оболочки и переменных make, я предлагаю реализовать это как чистый сценарий оболочки, интегрированный в Makefile.

Вместо проверки вывода grepс wcи сравнения числа вы можете просто проверить код выхода grep.

# don't forget to declare start_docker_myapp as a phony target
.PHONY: start_docker_myapp

# Assuming you intended to use Make variables everywhere, I changed all ${VAR} to $(VAR).
# If your grep supports option -q you can use this instead of redirection to /dev/null.

start_docker_myapp:
    if docker ps -a | grep myapp >/dev/null; \
    then \
        echo 'true'; \
        # docker restart $(IMAGE); \
    else \
        echo 'false'; \
        # docker run -v $(DIR)/var/log/docker:/var/log/myapp -p 1812:1812/udp  -p 1813:1813/udp --detach  --name $(IMAGE) $(REGISTRY)/$(IMAGE):$(TAG); \
    fi

Или с логическими операторами вместоif...then...

.PHONY: start_docker_myapp

start_docker_myapp:
    docker ps -a | grep myapp >/dev/null && docker restart $(IMAGE) || docker run -v $(DIR)/var/log/docker:/var/log/myapp -p 1812:1812/udp  -p 1813:1813/udp --detach  --name $(IMAGE) $(REGISTRY)/$(IMAGE):$(TAG)
1
27.01.2020, 21:55

Теги

Похожие вопросы