エンジニアのソフトウェア的愛情

または私は如何にして心配するのを止めてプログラムを・愛する・ようになったか

Mix で管理する Elixir プロジェクトでコンパイル対象のパスを追加する

Phoenix のプロジェクトの mix.exs を見れば一目瞭然なのですが、project/0 が返すキーワードリストに、:elixirc_paths をキーにコンパイル対象のパスのリストを値にして追加すると、それらのパスがコンパイル対象になります。

# mix.exs

  def project do
    [
      app: :sample,
      version: "0.1.0",
      elixir: "~> 1.6",
      elixirc_paths: ["lib", "test/support"], # `lib` と `test/support` をコンパイル対象にする
      start_permanent: Mix.env() == :prod,
      deps: deps()
    ]
  end

Phoenix プロジェクトと同じように書くと、ビルド環境によって対象を切り替えることができます。

# mix.exs

  def project do
    [
      app: :sample,
      version: "0.1.0",
      elixir: "~> 1.6",
      elixirc_paths: elixirc_paths(Mix.env()),
      start_permanent: Mix.env() == :prod,
      deps: deps()
    ]
  end


  def elixirc_paths(:test), do: ["lib", "test/support"] # test 環境の時は `test/support` をコンパイル対象に含める
  def elixirc_paths(_), do: ["lib"]

ドキュメントの中にはなぜか記述が見つからない。

コードを追いかけてみるとデフォルトでは ["lib"] になっているのがわかります。