Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Makefile未按预期执行命令_Linux_Bash_Makefile_Gnu Make_Gnu - Fatal编程技术网

Linux Makefile未按预期执行命令

Linux Makefile未按预期执行命令,linux,bash,makefile,gnu-make,gnu,Linux,Bash,Makefile,Gnu Make,Gnu,我正在使用下面的Makefile,它应该检查这些文件是否在某个目录下*.rpm,如果没有找到这些文件,我将执行一些命令(运行脚本或生成rpm) 这是我的Makefile中的一个片段 include /home/user/workspace/test/exec_recipe.mk export BUILD_LOGS_DIR = $(CURDIR)/build_logs .PHONY: my_rpm libpdutil_rpm: @echo "Making target 'l

我正在使用下面的Makefile,它应该检查这些文件是否在某个目录下
*.rpm
,如果没有找到这些文件,我将执行一些命令(运行脚本或生成rpm)

这是我的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 '$@': $$res" >> $(SUMMARY); \
    exit $$rc
所以问题是当它到达执行
exec\u recipe.mk
时,它给了我一些错误:

/bin/bash:eval:line 0:意外标记附近的语法错误
/bin/bash:eval:第0行:
||'

我肯定我做错了什么。。 我需要helper make文件,因为我还将其用于其他目的

您必须避开所有不希望make解释的美元符号。您忘记了在
$(call exec_recipe,…)
的参数中转义美元符号:

我不知道最后一个逗号是什么意思,但不管怎样。

你必须避开所有你不想解释的美元符号。您忘记了在
$(call exec_recipe,…)
的参数中转义美元符号:


我不确定最后一个逗号是什么意思,但不管怎样。

也许你会提出一个更好的解决方案,我想检查rpm是否已生成或下载,如果它们不存在,我将执行代码的make rpm,或者我拥有的任何生成工具,我需要execute_recipe.mk,因为它正在其他地方使用,我甚至可以使用
test-n$(find path-name'*.rpm'-print-quit)
我不理解你在这里的评论。在我的回答中,我解释了你的makefile中的错误。如果你修复它可能会工作(我自己没有尝试过,所以我不能确定)。这不是我应该做的,但你没有问这个。如果你按照我的建议进行了修复,但没有修复问题,那么你应该编辑你的问题来描述新问题,或者问一个新问题。也许你提出了更好的解决方案,我想检查rpm是否已生成或下载,如果没有,我将执行代码的make rpm,或者我拥有的任何生成工具,我需要execute_recipe.mk,因为它正在其他地方使用,我甚至可以使用
test-n$(find path-name'*.rpm'-print-quit)
我不理解您的评论。在我的回答中,我解释了你的makefile中的错误。如果你修复它可能会工作(我自己没有尝试过,所以我不能确定)。这不是我应该做的,但你没有问这个。如果您按照我的建议进行了修复,但没有修复问题,那么您应该编辑您的问题以描述新问题,或者提出新问题。
        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,)