0

我正在尝试为嵌入式系统项目设计一个 SConstruct 文件。我机器上的编译器位于“C:\Program Files\IAR Systems\Embedded Workbench 5.4\arm\bin”我希望构建系统尝试定位工具链,即使安装了另一个版本的 Embedded Workbench,或者如果用户已选择将其安装在其他地方。

我也对 makefile 或 ant 文件中使用的策略感兴趣,因为它们在这里可能也很有用。

有哪些策略可以做到这一点?除了搜索 Windows 注册表或查找“C:\Program Files\IAR Systems\Embedded Workbench *\arm\bin”之外,我还有其他选择吗?

4

3 回答 3

2

最简单的解决方案是使用环境变量。您仍然需要为每个构建主机手动设置它,但是构建系统只需要引用环境变量,因此对于所有构建主机都是通用的。

例如,在您的情况下,您可能有:

EWBARM_V0504="C:\Program Files\IAR Systems\Embedded Workbench 5.4\arm\bin"

与安装的其他版本类似,然后在您的构建系统中,您将使用 %EWBARM_V0504% 代替路径。更糟糕的是,如果变量不存在,构建将失败,这比使用错误的编译器更可取,并且很容易修复。

于 2010-02-01T23:25:37.780 回答
0

由于不同版本的工具链可能具有不同的错误和/或功能,因此默默地退回到不同的工具集可能是一个坏主意。当我在单个项目上支持多个工具版本时,我通常会通过 makefile 或环境分配版本号。然后,您可以传递-D TOOLS_VERSION=$(TOOLS_VERSION)给您的编译器并使用该值来修复特定版本工具所需的关键错误修复和解决方法。该系统清楚地说明了您想要支持哪些工具,同时仍然使其他开发人员可以轻松地通过进行一次编辑来切换工具版本。

于 2010-02-01T23:25:00.543 回答
0

SCons 的好处是你可以使用所有的 python。因此,您可以使用 win32.winreg 在注册表中查找,或者在路径集中查找任何适合您的路径。当然,您可以使用命令行选项或选项文件来覆盖自动检测。然后,一旦你找到了你选择的工具,你基本上有两种方法可以让 SCons 使用它:或者将工具的目录添加到 env['ENV']['PATH'] (你可以使用 env.PrependEnvPath),或者只是使用工具的完整路径作为 $CC 的值(并适当地设置 $LINK、$SHLINK 等)。

我通常制作一个 TOOL_MYCOMPILER 函数,该函数接受一个环境并将其全部设置为与编译器及其工具链(cpp、链接器等)一起使用。它使您的 SConstruct/SConscript 中的内容更加整洁。

于 2010-02-04T00:36:48.397 回答