我有一个Arduino微控制器,通过串口将数据发送到HC-05蓝牙模块。由于连接到通信端口的实现是特定于OS的,因此包含文件将是不同的。是否有更好的方法来构建代码而不是#ifdef _WIN32
?
我正在使用的当前操作系统是Windows 10.
#ifdef _WIN32
#include <io.h>
#else
#include <unistd.h>
#include <termios.h>
#endif
ArduinoDevice::ArduinoDevice(const char *dev)
{
device = dev;
fp = NULL;
started = false;
iostarted = false;
}
void ArduinoDevice::connect()
{
#ifdef _WIN32
//windows code
#else
//mac code
#endif
}
答案 0 :(得分:0)
您可以使用单个中性头文件(例如ArduinoDevice.h)和更多平台特定的源文件,每个支持的平台一个,扩展名为* .win32.cpp,* .posix.cpp(例如ArduinoDevice.win32。 cpp,ArduinoDevice.posix.cpp等。)
在每个操作系统上,您将只编译具有相关扩展名的源文件,而不需要更改调用代码。条件代码(#ifdef #endif块)不是必需的,可以在项目构建配置中处理使用文件或其他文件进行编译。
答案 1 :(得分:0)
考虑让您的应用程序逻辑调用一个抽象硬件知识的库。
定义
每个特定于平台的CPP文件都包含正确的标头,并使用实现标头中的功能所需的特定于平台的调用。通过将问题从代码推送到构建系统,这消除了对条件编译和管理谁需要更多条件编译的头文件的需要。
构建程序可能会有点棘手,但任何值得使用的开发环境都允许您定义不同的目标,构建目标所需的工具链以及目标构建中包含的文件。在过去,这会在makefile中产生一些额外的规则。它在系统上的完成方式因系统而异。