我在u-boot中遇到了以下shell脚本作为makefile的一部分。 它做了什么以及如何评估
cc-option = $(shell if $(CC) $(CFLAGS) $(1) -S -o /dev/null -xc /dev/null \
> /dev/null 2>&1; then echo "$(1)"; else echo "$(2)"; fi ;)
它被称为
PLATFORM_RELFLAGS +=$(call cc-option,-mshort-load-bytes,\
$(call cc-option,-malignment-traps,))
答案 0 :(得分:3)
代码运行if
命令。 if
接受一个参数:要执行的命令($(CC) $(CFLAGS) $(1) -S -o /dev/null -xc /dev/null > /dev/null 2>&1
)。
如果命令成功,则执行then
部分(echo "$(1)"
)。如果命令失败,则执行else
部分(echo "$(2)"
)。
在您的情况下,编译器启动时可能不支持某些选项($1
为-mshort-load-bytes
)。
由于$2
为空,结果将是选项(如果编译器支持)或空字符串。