2016-05-25 4 views
0

Я использую следующий Makefile, который должен проверить, находятся ли файлы в каком-то каталоге *.rpm, если файлы не были найдены, я собираюсь выполнить некоторую команду (запустите скрипт или сделать оборотов в минуту)Makefile не выполняет команды как ожидалось

Вот отрывок из моего Makefile

include /home/user/workspace/test/exec_recipe.mk 
export BUILD_LOGS_DIR = $(CURDIR)/build_logs 
.PHONY: my_rpm 
libpdutil_rpm: 
      @echo "Making target 'libpdutil_rpm'. Time: $$(date +%T)" 
      cd /home/user/workspace/test/build/test && $(call exec_recipe,$(ls /home/user/workspace/test/build/test/rpmbuild/RPMS/x86_64d/*.rpm) || $(./test.sh),test.log,) 
      @echo "Finished making target 'my_rpm'. Time: $$(date +%T)" 

И вот exec_recipe.mk

SHELL:=/bin/bash 
exec_recipe = \ 
    echo "The logs dir is: $$BUILD_LOGS_DIR"; \ 
    log_name="$(2)"; \ 
    echo "The log name is $$log_name"; \ 
    cmd="$(1)"; \ 
    eval "$$cmd" 2>&1 | tee -a "$$BUILD_LOGS_DIR/$$log_name"; rc="$${PIPESTATUS[0]}"; \ 
    if [ $$rc = 0 ]; then \ 
     res="PASS"; \ 
    else \ 
     res="FAIL"; \ 
    fi; \ 
    flock $(SUMMARY) echo "Making target '[email protected]': $$res" >> $(SUMMARY); \ 
    exit $$rc 

Так пр oblem, когда он достигает выполнения exec_recipe.mk, он дает мне некоторые ошибки:

/bin/bash: eval: line 0: syntax error near unexpected token || ' /bin/bash: eval: line 0: || '

Я уверен, что я делаю что-то неправильно .. мне нужен помощник сделать файл, потому что я использую его для других целей, а

ответ

2

Вы должны бежать все долларов признаки, которые вы не хотите интерпретировать. Вы забыли, чтобы избежать знаков доллара в аргументах $(call exec_recipe,...):

 cd /home/user/workspace/test/build/test && $(call exec_recipe,$$(ls /home/user/workspace/test/build/test/rpmbuild/RPMS/x86_64d/*.rpm) || $$(./test.sh),test.log,) 

Я не уверен, что окончательная запятая для но независимо.

+0

Возможно, вы предлагаете лучшее решение, я хочу проверить, были ли созданы или загружены RPM, если они там не будут, я буду выполнять make rpm моего кода или любой инструмент сборки, который у меня есть, мне нужно execute_recipe.mk, потому что он используется в других местах, я мог бы даже использовать 'test -n $ (find path -name '* .rpm' -print -quit)' – user3502786

+0

. Я не понимаю ваш комментарий здесь. Я объяснил, что было не так в вашем make-файле, в моем ответе. Если вы решите, что это может сработать (я сам не пробовал, поэтому не могу быть уверен). Я бы этого не сделал, но вы этого не спрашивали. Если вы сделаете исправление, как я предложил, и это не устраняет проблему, тогда вы должны отредактировать свой вопрос, чтобы описать новую проблему, или задать новый вопрос. – MadScientist