Eclipse 让这变得相当混乱,因为有多个地方可以设置它,并且设置是耦合的,但它是这样工作的:
为给定项目设置自定义宏(影响 Eclipse 中的构建和索引)
这是我的首选方式。
在本例中,我们将在 Eclipse 项目级别(为其索引器和构建器)设置以下定义,而不是在您的源代码中。
#define ARDUINO 1000
#define AVR
#define __AVR_ATmega328__
如果您在手动构建gcc 或g++ 项目时在命令行中定义它们,上面的#defines 将如下所示(在man gcc 页面中搜索-Dmacro 以获取详细信息):
-DARDUINO=1000 -DAVR -D__AVR_ATmega328__
所以,在您的 Eclipse 项目中执行以下操作。我在这里的项目称为“Arduino 1.8.13”(请参阅下面这几张图片的完整截图):
在左侧的“项目资源管理器”窗格中右键单击您的项目 --> 属性 --> C/C++ 常规 > --> Paths and Symbols --> Symbols 选项卡 --> 选择 GNU C 或 GNU C++ --> 点击右上角的添加按钮 --> name输入ARDUINO,value输入1000 -- > 请务必选中 添加到所有配置 和 添加到所有语言 的 2 个框(除非您不想要这些行为)--> 单击 确定.
对所有定义重复此步骤,如下所示。请务必为每个选项选中添加到所有配置和添加到所有语言(除非您不希望这些行为)复选框:
- 名称:
ARDUINO,值:1000
- 名称:
AVR,值:(留空)
- 名称:
__AVR_ATmega328__,值:(留空)
这是显示第一个的屏幕截图。注意所有突出显示的部分以单击或注意:
为所有要定义的宏(例如:上面的 3 个)完成此操作后,您将看到以下内容:
- 如果您为每种语言选中了添加到所有语言,那么这些宏将同时应用于 GNU C 和 GNU C++ 语言。因此,单击一个,然后单击另一个,您应该会在两个位置看到宏,如下所示:
- 如果您为每一项都选中了添加到所有配置复选框,那么这些宏也将应用于所有构建“配置”,例如 Debug 和发布,如下图:
- 请记住,“语言”和“配置”的所有各种组合都是独一无二的。如果在添加宏时未选中添加到所有配置和添加到所有语言这两个框,您可以为每个配置单独设置一种或两种语言的宏.
- 如果您导航到 项目属性 --> C/C++ 构建 --> 设置 --> 工具设置 选项卡 --> Cross GCC Compiler --> Preprocessor 在构建或索引时,您还会看到现在为所有“GCC”C 文件定义了这些宏!:
请注意,您还可以在此处编辑、添加或删除特定于给定“配置”或“语言”(此特定位置适用于 GNU C 语言)的宏,而不是像上面之前所做的那样, 如果你喜欢。 但是,将给定宏同时应用于所有语言和所有构建配置的唯一方法就是按照我在上面向您展示的方式进行操作。
- 如果您导航到 Project Properties --> C/C++ BuildGNU C++ 构建和索引设置/strong> --> 设置 --> 工具设置选项卡 --> Cross G++编译器 --> 预处理器:
同样,要为 C++ 自定义宏并且仅针对此选定的“配置”,您可以在此处对其进行编辑。
添加完所有宏后,点击应用或应用并关闭。询问时,选择 YES 以重新索引整个项目:
如果您没有点击YES,您可以手动触发项目重新索引,方法是在项目资源管理器中右键单击它并转到 --> 索引 --> 重建。
疑难解答
如果您的设置/宏似乎没有被应用,并且您的代码仍然显示部分被涂黑,表明这些部分的宏是错误的或未定义的,您可能需要执行或检查以下操作:
- 尝试通过在项目资源管理器中右键单击项目并转到 --> 索引 --> 重建来重新索引您的项目。
- 您可能没有为正确的构建配置或语言设置宏。正如我在上面的各种屏幕截图中所示,您将需要检查所有各种构建配置和语言。
- 按照上面的说明重新添加宏,这次一定要选中 添加到所有配置和添加到所有语言的 2 个框。。李>
- 或者,手动导航到 Project Properties --> C/C++ Build --> Settings --> Tool设置 标签 -->
- --> 跨 GCC 编译器 --> 预处理器 OR
- --> 跨 G++ 编译器 --> 预处理器...
- ...部分手动配置宏仅用于一种语言和/或配置,或另一种。所有这些设置必须同步或单独设置。
- 如上所述,设置这些设置最简单的地方是:右键单击您的项目,在左侧的“项目资源管理器”窗格中 --> 属性 --> C/C++ 常规 --> 路径和符号 --> 符号选项卡。但是,如果您忘记选中 添加到所有配置 和 添加到所有语言 复选框,我建议您删除宏然后再次添加它们,这次检查那些盒子。
- 如果您不想担心选择了哪个构建配置,并且在添加宏时没有选中添加到所有配置框,您也可以更改此全局工作区设置,但我不太推荐:
Window --> Preferences --> C/C++ --> Indexer --> 选择 Use active build configuration。但是,我自己也不使用此选项,也不一定建议您使用它。这只是需要注意的事情。
另见
- 这个答案也发布在我的网站上:https://gabrielstaples.com/eclipse-defining-custom-macros-for-indexer/
- 我的完整 Eclipse 设置文档在这里:https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles/tree/master/eclipse