1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
module Examples.C.Main(main) where
import Development.Shake
import Development.Shake.FilePath
import Examples.Util
main = shaken noTest $ \args obj -> do
let src = "Examples/C"
want [obj "Main.exe"]
obj "Main.exe" *> \out -> do
cs <- getDirectoryFiles src ["*.c"]
let os = map (obj . (<.> "o")) cs
need os
cmd "gcc -o" [out] os
obj "*.c.o" *> \out -> do
let c = src </> takeBaseName out
need [c]
headers <- cIncludes c
need $ map ((</>) src . takeFileName) headers
cmd "gcc -o" [out] "-c" [c]
cIncludes :: FilePath -> Action [FilePath]
cIncludes x = do
Stdout stdout <- cmd "gcc" ["-MM",x]
return $ drop 2 $ words stdout
|