生成文件未按预期执行命令



我正在使用以下 Makefile,它应该检查文件是否在某个目录*.rpm中,如果找不到文件,我将执行一些命令(运行脚本或制作 rpm)

这是我的制作文件中的片段

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 '$@': $$res" >> $(SUMMARY); 
    exit $$rc

所以问题是当它到达exec_recipe.mk的执行时,它会给我一些错误:

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

确定我做错了什么..我需要帮助程序制作文件,因为我也将其用于其他目的

你必须逃避所有你不想解释的美元符号。 你忘了在论据中转义美元符号$(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,)

我不确定最后一个逗号是做什么的,但无论如何。

最新更新