什么是Eclipse的构建变量以及它们与环境变量的区别?

时间:2015-06-30 19:57:02

标签: eclipse build makefile environment-variables eclipse-cdt

使用ARM DS-5环境,基于Eclipse 4.3.2,我定义了一个C项目并使用Makefile来构建它。 Makefile包含一些模块选择变量,根据我们是否要包含模块,这些变量设置为YN

我正在尝试从项目设置中设置这些变量。因此,我使用以下构造在Makefile中具有默认设置:

Module_1 ?= Y
Module_2 ?= Y

现在,我想将项目变量Module_1添加到YN。碰巧Build Variables下有EnvironmentC/C++ Build个变量。当我将Module_1 N添加到Environment变量时,它会覆盖默认设置。但是,当我在Build Variables中执行相同操作时,它无效。

两种变量之间有什么区别?

1 个答案:

答案 0 :(得分:4)

据我所知:

  • 只能在Eclipse中访问构建变量。它们可能会影响其他Eclipse组件。您还可以在Eclipse make targets中引用这些变量,例如:

    make ${name_of_variable}(注意大括号)

    其中“name_of_variable”将在Eclipse的“Build Variables”菜单中声明。这些变量可以作为参数传递给外部工具,但它们不是这些工具的shell环境的一部分。

  • 可以从构建过程中启动的外部工具访问环境变量(例如,GNU make:如果在Eclipse的“环境变量”中声明“env_variable”,则可以使用语法{在makefile中使用它] {1}}(注意括号))。它们成为外部工具的shell环境的一部分。请注意,它们也可以在Eclipse中用作构建变量。此外,您可以在环境变量的声明中调用构建变量,例如$(env_variable),反之亦然。

误导性的一点是,当您在Eclipse的“构建变量”配置页面中勾选“显示系统变量”时,您会看到Eclipse IDE本身的环境变量,以及您在Eclipse中定义的环境变量。

我不是Eclipse的开发人员,所以我无法证明上述行为的基本原理。我怀疑其目的是避免仅在IDE内部有用的变量与应传播到外部工具环境的变量之间的冲突。我宁愿在Eclipse中有一个变量类型,也可以选择是否导出它们(例如勾选一个复选框“export”)。这会更有意义。