解析Makefile列表变量

时间:2017-02-14 18:28:11

标签: string bash shell parsing makefile

提前谢谢你。 我有一个列表,每个条目都是一个单词 例如:这是命令

'tvc := $(shell jpl-tcs.sh --check_tool_versions --pcf $(PCF))'

这是输出:
    @N: tcs_init_pkg::tcs_build_dirs: Found par directory: /data/home/nbrummel/jpl-tcs/examples/build/cntr/xilinx/par @N: tcs_init_pkg::tcs_build_dirs: Found bit directory: /data/home/nbrummel/jpl-tcs/examples/build/cntr/xilinx/bit @N: tcs_init_pkg::tcs_build_dirs: Found log directory: /data/home/nbrummel/jpl-tcs/examples/build/cntr/xilinx/logs @N: tcs_init_pkg::tcs_build_dirs: Found cores directory: /data/home/nbrummel/jpl-tcs/examples/build/cntr/xilinx/cores @N: tcs_init_pkg::check_xilinx_env_var: XILINX env var is set to: /data/opt/Xilinx/13.2/ISE_DS/ISE @N: jpl-tcs.sh: Checking tool versions @N: tcs_check_versions.py: tool_version.txt found @N: tcs_check_versions.py: Found tool_version.txt in xilinx @N: tcs_check_versions.py: Tool version check : Completed. ---> Local tool versions match tool_version.txt! @N: jpl-tcs.sh: Passed Tool Check @N: jpl-tcs.sh: Using default Xilinx command-line options file: /data/home/nbrummel/jpl-tcs/tcs_defaults/tcs_xcl_tools.sh

我想将输出格式化为控制台或屏幕,如下所示。

@N: tcs_init_pkg::tcs_build_dirs: Found par directory: /data/home/nbrummel/jpl-tcs/examples/build/cntr/xilinx/par 
@N: tcs_init_pkg::tcs_build_dirs: Found bit directory: /data/home/nbrummel/jpl-tcs/examples/build/cntr/xilinx/bit 
@N: tcs_init_pkg::tcs_build_dirs: Found log directory: /data/home/nbrummel/jpl-tcs/examples/build/cntr/xilinx/logs 
@N: tcs_init_pkg::tcs_build_dirs: Found cores directory: /data/home/nbrummel/jpl-tcs/examples/build/cntr/xilinx/cores 
@N: tcs_init_pkg::check_xilinx_env_var: XILINX env var is set to: /data/opt/Xilinx/13.2/ISE_DS/ISE 
@N: jpl-tcs.sh: Checking tool versions 
@N: tcs_check_versions.py: tool_version.txt found 
@N: tcs_check_versions.py: Found tool_version.txt in xilinx 
@N: tcs_check_versions.py: Tool version check : Completed. ---> Local tool versions match tool_version.txt! 
@N: jpl-tcs.sh: Passed Tool Check 
@N: jpl-tcs.sh: Using default Xilinx command-line options file: /data/home/nbrummel/jpl-tcs/tcs_defaults/tcs_xcl_tools.sh`

新打印输出始终以“@”字符开头。我已经得到它在每一行打印出一个单词,但这不是我想要的。任何帮助都会很棒。此外,这不是一个食谱。

如果我运行jpl-tcs.sh ...,我会得到上面的格式化输出。如果我在Make with tvc:=$(shell jpl-tcs.sh ...)$(info $(tvc))中运行相同的命令,那么我会得到带有换行符的输出,其中省略了换行符。我想让它像在shell中一样显示,但是当我在make中调用它时。我该怎么做?

1 个答案:

答案 0 :(得分:1)

一个简单的解决方案:

sed 's/ @N:/\n@N:/g' file

或者,如果列表是shell变量:

sed 's/ @N:/\n@N:/g' <<< "$list"

如果列表位于make变量中,您可以在配方中使用非常相似的内容:

show_tvc:
    printf "%s\n" "$(tvc)" | sed 's/ @N:/\n@N:/g'

但最简单的解决方案可能是将shell命令的输出直接发送到终端:

$(shell jpl-tcs.sh --check_tool_versions --pcf $(PCF) 1>&2)