Actually, Rake has both. You can define file targets using "file", but I found that for smaller projects it just becomes a more verbose make.
make is pretty neat if you think about it as a framework to help you compute/derive values from other values. each value happens to be stored in the filesystem as a file.
in contrast, many of the newer build-tool make replacements seem to miss the whole value of values and either push or force you in a direction of doing actions with side effects.
file 'blogpost.html' # we want to produce blogpost.html
# this rule specifies how to build
# any .html from the source
rule ".html" => ".md" do |t|
sh "pandoc -o #{t.name} #{t.source}"
end