Linux Makefile未按预期执行命令
我正在使用下面的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
*.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,)