Eclipse 让这变得相当混乱,因为有多个地方可以设置它,并且设置是耦合的,但它是这样工作的:
为给定项目设置自定义宏(影响 Eclipse 中的构建和索引)
这是我的首选方式。
在此示例中,我们将在 Eclipse 项目级别(针对其索引器和构建器)而不是在您的源代码中设置以下定义。
#define ARDUINO 1000
#define AVR
#define __AVR_ATmega328__
如果您在手动构建gcc
或g++
项目时在命令行中定义它们,则上面#define
的 s 将如下所示(-Dmacro
在man gcc
页面中搜索以获取详细信息):
-DARDUINO=1000 -DAVR -D__AVR_ATmega328__
因此,在您的 Eclipse 项目中执行以下操作。我的项目在这里被称为“Arduino 1.8.13”(见下面这几张图片的完整截图):
在左侧的“项目资源管理器”窗格中右键单击您的项目-->属性--> C/C++ 常规-->路径和符号-->符号选项卡 --> 选择GNU C或GNU C++ -- > 单击右上角的添加按钮 --> 输入ARDUINO
名称和值--1000
>确保选中 2 个框以添加到所有配置和添加到所有语言(除非您不想要这些行为)- -> 单击确定。
对所有定义重复此步骤,如下所示。请务必选中每个配置的添加到所有配置和添加到所有语言(除非您不想要这些行为)复选框:
- 名称:
ARDUINO
,值:1000
- 名称:
AVR
,值:(留空)
- 名称:
__AVR_ATmega328__
,值:(留空)
这是显示第一个的屏幕截图。请注意所有突出显示的部分以单击或注意:
一旦你为你想要定义的所有宏(例如:上面的 3 个)完成了这个,你将看到以下内容:
- 如果您为每种语言选中了添加到所有语言的复选框,那么这些宏将同时应用于GNU C和GNU C++语言。因此,单击一个,然后单击另一个,您应该会在两个位置看到宏,如下所示:
- 如果您选中了每个配置的添加到所有配置框,那么这些宏也将应用于所有构建“配置”,例如Debug和Release,如下所示:
- 请记住,“语言”和“配置”的所有各种组合都是独一无二的。如果在添加宏时未选中添加到所有配置和添加到所有语言这两个框,您可以为每个配置单独设置一种或两种语言的宏。
- 如果您导航到项目属性--> C/C++ 构建-->设置-->工具设置选项卡 -->跨 GCC 编译器-->预处理器,您还将看到现在为所有“GCC”C 文件定义了这些宏,当构建或索引!:
请注意,您还可以在此处编辑、添加或删除特定于给定“配置”或“语言”(此特定位置用于GNU C语言)的宏,而不是像之前那样,如果你喜欢。但是,将给定宏同时应用于所有语言和所有构建配置的唯一方法是按照我在上面向您展示的方式进行操作。
- 如果您导航到Project Properties --> C/C++ Build --> Settings --> Tool Settings tab --> Cross G++ Compiler --> Preprocessor,您还可以看到这些宏应用于GNU C++构建和索引设置 :
同样,要为 C++ 自定义宏并且仅针对此选定的“配置”,您可以在此处编辑它们。
添加完所有宏后,单击Apply或Apply and Close。询问时,选择YES以重新索引整个项目:
如果您没有单击YES ,您可以通过在 Project Explorer 中右键单击该项目并转到 --> Index --> Rebuild手动触发重新索引项目。
故障排除
如果您的设置/宏似乎没有被应用,并且您的代码仍然显示部分被涂黑,表明这些部分的宏是错误的或未定义的,您可能需要执行或检查以下内容:
- 尝试通过在 Project Explorer 中右键单击项目并转到 --> Index --> Rebuild来重新索引您的项目。
- 您可能没有为正确的构建配置或语言设置宏。正如我在上面的各种屏幕截图中所示,您将需要检查所有各种构建配置和语言。
- 按照上面的说明重新添加宏,这次一定要选中Add to all configuration和Add to all languages的 2 个框。
- 或者,手动导航到项目属性--> C/C++ 构建-->设置-->工具设置选项卡 -->
- -->跨 GCC 编译器-->预处理器或
- -->跨 G++ 编译器-->预处理器...
- ...部分为一种语言和/或配置或另一种手动配置宏。所有这些设置必须同步或单独设置。
- 如上所述,设置这些设置最简单的地方是:在左侧的“项目资源管理器”窗格中右键单击您的项目-->属性--> C/C++ 常规-->路径和符号- ->符号选项卡。但是,如果您忘记选中Add to all configurations和Add to all language复选框,我建议您删除宏然后再次添加它们,这次选中这些复选框。
- 如果您不想担心选择了哪个构建配置,并且在添加宏时没有选中添加到所有配置框,您也可以更改此全局工作区设置,但我真的不推荐它:
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