gpt4 book ai didi

shake-build-system - 为交叉编译而摇晃?

转载 作者:行者123 更新时间:2023-12-04 07:58:42 26 4
gpt4 key购买 nike

我有一个构建两组目标的项目。一种是手持设备的各种版本的固件,最终为每个设备创建一个 .dfu 文件。这使用了 arm 编译链。另一组是为构建平台编译代码的相同设备的模拟器(嗯,通常无论如何)。我继承的 Makefile 在 cc != gcc 的任何环境中都无法正常工作,因为将编译器传递给递归 make 存在问题。

我正在考虑在抖动中重写构建文件,但想知道它可以如何处理想要做一个“make release”,然后用不同的编译器或标志多次编译同一组源文件以生成不同类型的二进制文件.这不是我以前遇到过的问题,而且根据我的谷歌搜索,没有很多人公开谈论过。

最佳答案

我不知道有人使用 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 将递归地同时创建两个版本。

关于shake-build-system - 为交叉编译而摇晃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28142660/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com