8

Haskell の楽しみを理論的なものから実用的なものに移しcabalHUnit、 などをより快適に使用できるようにする方法として、おもちゃのプロジェクトに取り組んでいます。

プロジェクトに Makefile を追加しました。

test: dist/build
  cabal-dev test

dist/build: dist/setup-config src/*.hs tests/*.hs
  cabal-dev build
  touch dist/build

dist/setup-config: ToyProject.cabal
  cabal-dev configure --enable-tests

なぜなら:

  • cabal-dev install --enable-testsやり過ぎのように思えた(そして再インストールについて私に警告していた)
  • cabal-dev configure --enable-tests && cabal-dev build && cabal-dev test不必要な作業をしていて、再構成が必要かどうかについて状態を維持するのは退屈でした
  • どちらも大量のタイピングでした

cabalMake を使用して機能を再作成している、または既に提供している可能性があるのではないかと心配してcabal-devいますが、それが本当かどうか、またそうである場合はどうすればよいかを知るには十分ではありません。

cabalここでは Makefile が適切ですか、それとも/を使用するだけでこれを行うより直接的な方法はありcabal-devますか?

4

1 に答える 1

1

以下は、Cabal パッケージに依存する別の Haskell プログラムと並行して開発している Cabal パッケージで使用する Makefile の簡略化されたバージョンです (私はしばしばそれらを並行して編集するため、Cabal パッケージをビルドの依存関係として持っています。プログラム、別の Makefile を使用:P)。目標は次のとおりです。

  1. cabal一部のソース ファイルが実際に変更された場合にのみ実行します。この Makefile は、Cabal の依存関係の解決に数十秒かかる非常にcabal install遅いネットブックで使用しているため、可能であれば実行を避けたいと考えています。

  2. 独立したデバッグと通常のビルドを別々のビルド ディレクトリに配置します。デフォルトでは、プロファイリング ( --ghc-options=-fprof-auto) を使用して Cabal ビルドを実行し、次にプロファイリングを使用しない場合、Cabal は最初からやり直し、すべてのファイルを最初から再コンパイルします。ビルドを別々のビルド ディレクトリに配置すると、この問題が回避されます。

(2)があなたにとって興味深いかどうかはわかりませんが、(1)はおそらくそうです。失敗ではなく、成功した場合にのみビルドディレクトリに触れることがわかります。それは正しく機能しないと思います。

Makefile は次のとおりです。

cabal-install: dist

cabal-install-debug: prof-dist

# You will need to extend this if your cabal build depends on non
# haskell files (here '.lhs' and '.hs' files).
SOURCE = $(shell find src -name '*.lhs' -o -name '*.hs')

# If 'cabal install' fails in building or installing, the
# timestamp on the build dir -- 'dist' or 'prof-dist', stored in
# the make target variable '$@' here -- may still be updated.  So,
# we set the timestamp on the build dir to a long time in the past
# with 'touch --date "@0" $@' in case cabal fails.
CABAL_INSTALL = \
  cabal install $(CABAL_OPTIONS) \
  || { touch --date "@0" $@ ; \
       exit 42 ; }

dist: $(SOURCE)
    $(CABAL_INSTALL)

# Build in a non-default dir, so that we can have debug and non-debug
# versions compiled at the same time.
#
# Added '--disable-optimization' because '-O' messes with
# 'Debug.Trace.trace' and other 'unsafePerformIO' hacks.
prof-dist: CABAL_OPTIONS += --ghc-options="-fprof-auto" --builddir=prof-dist --disable-optimization
prof-dist: $(SOURCE)
    $(CABAL_INSTALL)
于 2013-11-08T22:35:53.357 に答える