我不知道有人使用 Shake 进行交叉编译(尽管我想它会发生),但是很多人使用一个 Shake 脚本构建不同的配置,例如调试/配置文件/发布,这需要大致相同的操作。通常的做法是将输出文件放在不同的目录中,并根据输出目录定义不同的规则(或相同的规则但参数化)。举个例子:
"release/arm//*.obj" *> \out -> command "arm-cc" ["source-file.c","-o",out]
"release/x86//*.obj" *> \out -> command "gcc" ["source-file.c","-o",out]
或者,您可以为每个规则设置相同的规则,只需根据目录切换编译器:
"release//*.obj" *> \out ->
let cc = if takeDirectory1 $ dropDirectory1 out == "arm" then "arm-cc else "gcc"
command cc ["source-file.c","-o",out]
哪个效果最好通常取决于 arm 和 x86 是否大部分相同但切换编译器,或者只是非常不同的东西。
最后,您只需调用want ["release/arm/install.tar.gz","release/x86/install.tar.gz"]
,Shake 就会一次递归地创建两个版本。