关于Makefile中的CFLAGS

时间:2012-03-25 16:16:53

标签: c gcc makefile

在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? 它似乎什么都不做。整条线路如何运作? 提前谢谢。

3 个答案:

答案 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选项是否可用?