makefile shell和pipe

时间:2013-09-02 08:26:53

标签: shell makefile pipe

我需要帮助:以下命令行无效

TESTS := $(shell cat test_cases_file | egrep -v ^\s*(#|$) ) 
all: $(TESTS) 

当我发布时:

make all

我收到类似“shell命令调用未完成”的错误。

2 个答案:

答案 0 :(得分:3)

egrep参数中缺少引号。如果我make我也相信#是评论的开始。

显然只是添加引号无济于事,你也需要逃避#

编辑: 实际上$也必须进行转义,如果make使用$$完成

试试这个:

TESTS := $(shell egrep -v '^\s*(\#|$$)' test_cases_file) 
all: $(TESTS)

最后,你真的不需要丢弃空行 - 这不会有害:

TESTS := $(shell egrep -v '^\s*\#' test_cases_file) 
all: $(TESTS)

答案 1 :(得分:0)

你偶然发现的可能是这样的事实,即括号在GNU Make中无法逃脱。

您可以使用帮助程序脚本解决此问题:

TESTS := $(shell ./grep.sh test_cases_file )
all: $(TESTS)

grep.sh的位置:

cat $1 | egrep -v ^\s*(#|$)