我正在使用 Shake 构建 lilypond 文件,然后将其放入网页中。我试图模仿手册中Build.hs
的第一个示例:
import Development.Shake
import Development.Shake.Command
import Development.Shake.FilePath
import Development.Shake.Util
dest = "www/static"
main :: IO ()
main = shakeArgs shakeOptions{shakeFiles="_build"} $ do
want ["www/index.html"]
phony "clean" $ do
putNormal "Cleaning files"
removeFilesAfter dest ["//*"]
"www/index.html" %> \out -> do
fs <- getDirectoryFiles "src/lilypond" ["*.ly"]
let pdfs = ["www/static" </> (takeBaseName sourceFile) -<.> "pdf" | sourceFile <- fs]
need pdfs
cmd_ "cp" "src/www/index.html" "www/index.html"
dest <> "//*.pdf" %> \outp -> do
let c = "src/lilypond" </> (dropDirectory1 . dropDirectory1 $ outp -<.> "ly")
let o = dropExtension outp
cmd_ "lilypond" "-o" [o] [c]
预期的行为是“构建 index.html 文件,所有 PDF 都应www/static
从各自的src/lilypond/*.ly
文件生成”。这适用于干净的构建,但编辑源.ly
文件不会触发重建,我不知道为什么。(更新:编辑src/www/index.html
也不会触发重建)
我尝试过的事情:
- 通过诸如
shake-build www/static/muppets.pdf
. 相同的行为。 - 生成一个
--profile
. 这里没有什么让我感到兴奋的。 - 详细输出。不知道在这里寻找什么,所以怀疑 PDF 规则实际上并不取决于
.ly
文件?在输出中看到depends = []
,预计非空。 need [c]
在 PDF 规则中明确。
我觉得这里有一个我错过的基本概念:/