4

GHCi と gedit で使用する非常に単純な Makefile を作成しています。基本的に、ロードするモジュールと、呼び出し/テストする関数 (およびそのパラメーター) を定義します。Makefile は GHCi を実行し、必要なコマンドをそれに渡す必要があります。でパイピングを試みましたが、通常のシェルでは機能しましたが、空白、文字列、および書式設定echoの処理方法が原因で失敗しました。make個々の入力行ではなく、全体を 1 行としてフィードします。その上、少し面倒です。

# Sorry if backslashes are messed up do to tabs...
module   = somemodule
function = somefunction
params = 5 "Hello"

default: *.hs
    echo                \
        :l $(module)        \
                    \
        $(function) $(params)   \
        | ghci          


どうすればこれをきれいかつエレガントに達成できますか? :)

4

2 に答える 2

3

2 つの別々のechoコマンドを使用してみましたか?

( echo ":l $(module)"; echo "$(function) $(params)" ) | ghci
于 2012-09-13T05:29:10.067 に答える
1

GNU Make の次期バージョンには、同様の状況を支援する$(file)機能がありますが、おそらくこれとは異なります。

その代わりに、基本的なアプローチは、重要な瞬間に改行を改行にしないことです。

define boilerplate
:l $(module)
$(function) $(params)
endef

define newline


endef

default: *.hs
    echo '$(subst $(newline),|,$(boilerplate))' | tr '|' '\n' | ghci

(その$(newline)定義のソース テキストには 2 つの空行が含まれていdefineますendef

GNU Make を仮定できず、したがってsubstorがない場合は、 -encoded 改行を直接 echo コマンドにdefine書き込むことができます。|

default: *.hs
    echo ':l $(module)|$(function) $(params)' | tr '|' '\n' | ghci

...その時点で、これが Idelic のサブシェルの提案よりも良いか悪いかは好みの問題です。

于 2012-09-13T07:49:34.297 に答える