makefile 外壳和管道

use*_*571 3 shell makefile pipe

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

TESTS := $(shell cat test_cases_file | egrep -v ^\s*(#|$) ) 
all: $(TESTS) 
Run Code Online (Sandbox Code Playgroud)

当我启动时:

make all
Run Code Online (Sandbox Code Playgroud)

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

ara*_*aer 5

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

显然,简单地添加引号是没有帮助的,您还需要转义#

编辑:实际上$也必须转义,如果是的话,make可以使用$$

尝试这个:

TESTS := $(shell egrep -v '^\s*(\#|$$)' test_cases_file) 
all: $(TESTS)
Run Code Online (Sandbox Code Playgroud)

最后,你真的不需要丢弃空行 - 这不会有什么坏处:

TESTS := $(shell egrep -v '^\s*\#' test_cases_file) 
all: $(TESTS)
Run Code Online (Sandbox Code Playgroud)