并行处理多个构建配置

时间:2017-08-08 13:39:21

标签: shake-build-system

如何使用两种不同的配置构建一组源文件而无需重建所有内容?

我当前的设置添加了一个选项--config = rel,它将从build_rel.cfg加载所有选项并将所有选项编译到build_rel /目录。

data Flags = FlagCfg String                                                                                                                                
    deriving (Show, Eq)                                                                                                                                    

flags = [Option ['c'] ["config"]                                                                                                                           
                (ReqArg (\x -> Right $ FlagCfg x) "CFG")                                                                                                   
                "Specify which configuration to use for the build"]                                                                                                                                              

main :: IO ()                                                                                                                                              
main = shakeArgsWith shakeOptions { shakeChange=ChangeModtimeAndDigest }                                                                                   
                     flags $                                                                                                                               
                     \flags targets -> return $ Just $do                                                                                                   

    let buildDir = "build" ++                                                                                                                              
                   foldr (\a def -> case (a, def) of  
                              (FlagCfg cfg, "") -> '_':cfg
                              otherwise         -> def)                                                                                    
                    "" flags                                                                                                                            

    -- Settings are read from a config file.                                                                                                               
    usingConfigFile $ buildDir ++ ".cfg"
    ...

如果我再运行

build --config=rel
build --config=dev

我最终会有两个版本

build_rel/
build_dev/

但是,每次切换配置时,我都会重建所有内容。我猜这是因为我所有的神谕都改变了#34;我希望所有的oracles都特定于我的两个不同的构建目录,以便更改不会干扰使用不同配置的构建。

我知道有一个-m选项来指定数据库的存储位置,但我不想指定两个必须一直同步的选项。

build --config=rel -m build_rel

有没有办法在解析了--config选项后更新选项shakeFiles?

另一个想法是参数化我的所有Oracles以包含我的构建配置,但后来我注意到usingConfigFile使用了Oracle,我也必须重新实现它。看起来很笨拙。

是否有其他方法可以构建多个目标而无需重建所有内容?这似乎是一件微不足道的事情,但我仍然无法弄明白。

0 个答案:

没有答案