我正在尝试重新定义此库中的 WEBSOCKETS_TCP_TIMEOUT 常量:[https://github.com/Links2004/arduinoWebSockets]。但我不想更改库,我想在我的代码中执行此操作。 WebSocket.h 中定义的常量:
#ifndef WEBSOCKETS_TCP_TIMEOUT
#define WEBSOCKETS_TCP_TIMEOUT (5000)
#endif
但是当我在代码中定义相同的常量时,库不会选择它,而是保持其不变的值,尽管在我自己的代码中我看到了我想要的值。这是我的代码示例:
#define WEBSOCKETS_TCP_TIMEOUT (10)
#include <WebSocketsServer.h
void setup()
{
...
Serial.printf("WS Timeout: %d\r\n", WEBSOCKETS_TCP_TIMEOUT);
}
它打印我想要的值,但库以旧值运行...如果我将#include放在#define之前 - 一样。但是,如果我删除 WebSocket.h 中的定义并更改定义(我不想这样做) - 它会打印正确的值并使用新值进行操作。
我做错了什么?重新细化标准库中定义的常量的正确方法是什么?
您需要确保使用该值编译库。如果 WebSockets.cpp 在编译时“看到”5000,那么您以后所做的任何事情都不会改变它。它现在在目标文件中。您不必更改库的源代码,但必须确保在构建库时定义宏,例如使用
-DWEBSOCKETS_TCP_TIMEOUT=10
将其传递给编译器(尽管 10 毫秒是一个非常短的超时).
对于 Arduino 编译器,这通常通过构建属性来完成,例如:
arduino-cli compile --build-properties="build.extra_flags=-DWEBSOCKETS_TCP_TIMEOUT=10" ...