在makefile中,有一行:
CFLAGS += $(shell $(CC) -fno-stack-protector -E -x c /dev/null >/dev/null 2>&1
&& echo -fno-stack-protector)
使用的是什么
shell $(CC) -fno-stack-protector -E -x c /dev/null >/dev/null 2>&1
?
它似乎什么都不做。整条线路如何运作?
提前谢谢。
答案 0 :(得分:5)
它测试-fno-stack-protector
是否是C编译器的有效命令行选项,如果是,则将此选项附加到CFLAGS
,否则它不执行任何操作。
答案 1 :(得分:4)
如果您的编译器没有选项-fno-stack-protector
,它将返回错误代码(即!=0
},否则它将返回0
(意思是“ “在返回代码中”,表示一切都很好。
现在,表达式foo && bar
表示只有在bar
返回非错误代码(即foo
)时才会执行0
。所以,你看,如果你的编译器不有那个标志,它将返回“false”(某事!=0
)并且永远不会执行echo
命令。但如果它有标志,则会执行echo
。
答案 2 :(得分:0)
它是否以某种方式测试-fno-stack-protector选项是否可用?