我正在编写一个简单的Makefile,用于GHCi和gedit。本质上,我定义了一个要加载的模块,以及一个函数(及其参数)来调用/测试。 Makefile需要执行GHCi,然后将必要的命令传递给它。我尝试使用echo
滚动,并且它在普通的shell中工作,但由于make
处理空格,字符串和放大器的方式而失败。格式。它将整个事物作为一条线输入,而不是单独的输入线。最重要的是,它有点乱。
# Sorry if backslashes are messed up do to tabs...
module = somemodule
function = somefunction
params = 5 "Hello"
default: *.hs
echo \
:l $(module) \
\
$(function) $(params) \
| ghci
我怎样才能干净利落地 :)
答案 0 :(得分:3)
您是否尝试过使用两个单独的echo
命令?
( echo ":l $(module)"; echo "$(function) $(params)" ) | ghci
答案 1 :(得分:1)
即将推出的GNU Make版本将有一个$(file)
function来帮助处理类似情况,但可能不是这个。
代替这一点,基本方法是在关键时刻让换行符不是新行:
define boilerplate
:l $(module)
$(function) $(params)
endef
define newline
endef
default: *.hs
echo '$(subst $(newline),|,$(boilerplate))' | tr '|' '\n' | ghci
(该$(newline)
定义的源文本包含两个空行,因为define
在endef
之前吃了一个尾随换行符。)
如果您不能假设GNU Make,因此没有subst
或define
,您可以直接在echo命令中编写|
- 编码的换行符:
default: *.hs
echo ':l $(module)|$(function) $(params)' | tr '|' '\n' | ghci
......在这一点上,这只是一个品味问题,这是否比Idelic的子壳建议更好或更差。