在第3方库中跳过#define

时间:2019-03-18 08:32:40

标签: c++ c arduino

我在Arduino项目中使用Adafruit BME280 Library库。
它有一行:

#define BME280_ADDRESS (0x77)

实际地址为0x76,但0x77是在库的内部定义的:

https://github.com/adafruit/Adafruit_BME280_Library/blob/master/Adafruit_BME280.h#L37

如何在不派生库或更改其代码的情况下设置0x76的值?

P.S。我使用lib_deps中的PlatformIO来管理我的依赖项。

更新:该代码(在#include块之后)不起作用:

#undef BME280_ADDRESS
#define BME280_ADDRESS (0x76)

3 个答案:

答案 0 :(得分:2)

也许您可以使用#undef BME280_ADDRESS取消该宏。

#undef仅影响#undef下面的代码。因此,如果在不同文件中使用它,则应将其添加到所使用的每个文件中。

如果该库已经编译过,更改宏的唯一方法是重新编译它。

答案 1 :(得分:2)

您可以使用预处理器指令来执行此操作,如other answer中所述。

另一个选择就是简单地使用您自己的代码进行编译。在repo中,该库仅是两个文件,即Adafruit_BME280.h / Adafruit_BME280.cpp。您可以简单地更改宏并按原样使用它。除非您自己将其编译为动态lib,否则它将静态链接到您的应用程序。

但是,您无需执行任何操作,因为Adafruit_BME280::begin()函数有不同的重载,可用来提供自己的自定义addr值。

Adafruit_BME280.h文件(第#202-203行):

    bool begin(uint8_t addr);
    bool begin(uint8_t addr, TwoWire *theWire);

此外,请检查examples以获得进一步的了解。

答案 2 :(得分:0)

该问题被低估了,因为它似乎与其他问题相似,但事实并非如此:我无法undef从另一个第三方对象中进行变量。

解决方案是在构建步骤中使用动态构建标志:!python extra_script.py

通过regexp修改下载的库

这是一个肮脏的解决方案,但已通过身份验证,不需要任何手动操作。仅git clone并在IDE中按下构建按钮。