Вы можете установить выходной каталог в зависимости от того, хотите ли вы выпуск или
тестовая сборка, но вы не можете заменить эту переменную в синтаксисе карты пути FileList.
Так что используйте ## map для отображения источников на объекты и proc для преобразования источников обратно в объекты.
Для выбора разных сборок я обычно передаю переменную в команду rake, например "rake CONFIG = Test build"
Вот минимальный rakefile, который выводит в одно дерево, зависящее от переменной CONFIG:
## 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
Обратите внимание также на создание выходных каталогов.
Больше заметок и примеров на моем сайте.