我找到awk行来获取python代码analyze ::
$ find ./ -name '*.py' -exec wc -l {} \; | sort -n| awk '{print $0}{s+=$0}END{print s}'
12 ./gb/__init__.py
23 ./gb/value_type.py
40 ./setup.py
120 ./gb/libcsv.py
200
$
我尝试将它放在Makefile ::
中$ cat Makefile
python_count_lines: clean
@find ./ -name '*.py' -exec wc -l {} \; | sort -n| awk '{print \$0}{s+=\$0}END{print s}'
但这不起作用::
$ make python_count_lines
awk: line 1: syntax error at or near }
Makefile:12: recipe for target 'python_count_lines' failed
make: *** [python_count_lines] Error 2
$
答案 0 :(得分:2)
Bertrand Martel是正确的,你需要通过将它们加倍来逃避美元符号,而不是在它们前面添加反斜杠(参见info here)。
然而,其余的建议是不对的,并且不会起作用;首先,您几乎不应该在配方中使用shell
功能。其次,在这里使用info
函数无法正常工作,因为在第一行中您将 shell 变量RES
设置为等于某个值,那么您尝试打印在第二行中生成变量RES
;不仅如此,而且每一行都在一个单独的shell中运行,并且在将配方的任何部分传递给shell之前,所有make变量和函数引用都是在前面扩展的。
你只需要这样做:
python_count_lines: clean
@find ./ -name '*.py' -exec wc -l {} \; | sort -n| awk '{print $$0}{s+=$$0}END{print s}'