1

rake compile実行時にコードを正常にビルドするが、ターゲットを別のディレクトリに配置し、実行時にビルドするRakefileを作成しようとしてい-DTESTますrake test。しかし、私は一生の間、それを行う方法を理解することはできません。私は今このようなものを持っています:

SRC = FileList['src/*.erl']
OBJ = SRC.pathmap("%{src,ebin}/X.beam")

rule ".beam" => ["%{ebin,src}X.erl"] do |t|
  sh "erlc ... -o ebin #{t.source}"
end

task :compile => OBJ

私が欲しいのtask :testは、コンパイラの出力をに入れebin_test(基本的に上記のコードのすべてのインスタンスをに変更ebinebin_test、呼び出しに-DTESTを追加することshです。誰かアイデアがありますか?

4

2 に答える 2

1

まあ、それは前向きな最初の質問ではありませんでした...答えはありません。

記録のために、ビルドとテストの両方に異なるコンパイル ルールを定義するタスクを用意することで問題を解決し、実際のビルド/テスト実行を行う前にパブリック タスクにそのタスクを呼び出させました。スコーピングの問題がいくつかありますが、エキサイティングなことは何もありません。結果として得られる完全な rakefile をわざわざ貼り付けるつもりはありませんが、興味がある場合はお知らせください。

于 2009-02-18T22:15:17.380 に答える
0

リリースまたはテスト ビルドが必要かどうかに応じて出力ディレクトリを設定できますが、FileList パスマップ構文でその変数を置き換えることはできません。

したがって、##map を使用してソースをオブジェクトにマップし、proc を使用してソースをオブジェクトに変換します。

異なるビルドを選択するには、通常、「rake CONFIG=Test build」のように rake コマンドに変数を渡します。

CONFIG変数に依存する単一のツリーに出力する最小限のrakefileは次のとおりです。

## Config
CONFIG = ENV["CONFIG"] || "Release"
SRC_DIR = "src"
OBJ_DIR = File.join("obj",CONFIG)

## Tools
CC = "gcc"

## Inputs
C_SRCS = FileList["#{SRC_DIR}/**/*.c"]

## Outputs
# Map sources to objects
C_OBJS = C_SRCS.map { |f|
      f.sub(/^#{SRC_DIR}/, OBJ_DIR).ext('.o')
}

## Tasks
task :default => C_OBJS

# Generate a set of directory rules for the object files
C_OBJS.each do |f|
  directory f.pathmap('%d')
end

## Rules

# Generate objects from sources
rule '.o' => [
    proc { |tn| tn.sub(/#{OBJ_DIR}/, SRC_DIR).ext('.c') },
     '%d'
 ] do |t|
 sh %Q{#{CC} -c "#{t.source}" -o "#{t.name}"}
end

出力ディレクトリの作成にも注意してください。

私のサイトのより多くのメモと例。

于 2013-02-28T13:22:38.290 に答える