代码之家  ›  专栏  ›  技术社区  ›  Ben Gartner

如何在包含版本号的路径中查找编译器?

  •  0
  • Ben Gartner  · 技术社区  · 16 年前

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

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

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

    3 回复  |  直到 16 年前
        1
  •  2
  •   Clifford    16 年前

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

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

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

        2
  •  0
  •   Carl Norum    16 年前

    由于不同版本的工具链可能会有不同的bug和/或特性,默默地回到不同的工具集可能是个坏主意。当我在一个项目上支持多个工具版本时,我通常会通过makefile或环境指定版本号。那你就可以通过了 -D TOOLS_VERSION=$(TOOLS_VERSION) 并使用该值为特定版本的工具提供所需的错误修复和解决方法。该系统明确了您想要支持哪些工具,同时还可以让其他开发人员通过进行单个编辑来轻松切换工具版本。

        3
  •  0
  •   GaryO    16 年前

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

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