1

我需要帮助:以下命令行不起作用

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

当我启动时:

make all

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

4

2 回答 2

3

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

显然,简单地添加引号无济于事,您也需要转义#

编辑:实际上$也必须转义,以防万一make使用$$

尝试这个:

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

最后,您实际上并不需要丢弃空行 - 这不会造成伤害:

TESTS := $(shell egrep -v '^\s*\#' test_cases_file) 
all: $(TESTS)
于 2013-09-02T09:13:09.010 回答
0

您偶然发现的可能是这样一个事实,即括号在 GNU Make 中是不可转义的。

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

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

在哪里grep.sh

cat $1 | egrep -v ^\s*(#|$)
于 2013-09-02T08:44:22.143 回答